跳到主要內容

發表文章

目前顯示的是 6月, 2024的文章

如何在Ant中辨別OS是使用32位元還是64位元?

一開始想說可以透過os.arch去判斷, 但發現os.arch值是跟著JVM的! 舉例而言: 64-bit JVM值可能會顯示x64, amd64 or x86_64 32-bit JVM值會顯示x86 or i386 這會導致無法正確判斷使用者的OS是哪一種Arch. 經過小弟研究與Swind討論出一個可以在Windows2008、Windows2003、Win7、SLES、RHEL、Ubuntu、CentOS上正確取得Arch的方法, 並且簡單! 如下: <project name = "project" > <target name = "checkOS" > <condition property = "os.linux" > <os family = "unix" /> </condition > <condition property = "os.windows" > <os family = "windows" /> </condition > <echo > linux:${os.linux} </echo > <echo > windows:${os.windows} </echo > </target > <target name = "getLinuxBit" depends = "checkOS" if = "os.linux" > <exec executable = "/bin/bash" outputproperty = "linux-bit" > <arg value = "-c" /> <arg value = "getconf LONG_BIT&q

InstallAnywhere文章列表

Introduction InstallAnywhere是一個提供跨平台的安裝程式框架,提供了IDE讓你編輯安裝流程。我從工作開始使用2008,到現在升級至2015。會升級的主因是2008無法升級到Java 8 update 60,這是因為此版本的Java能夠正確判別出Windows10的版本,而導致Installer無法正確判斷Windows(有興趣可以自行trace IA的code)。在升級之前我們也撰寫了大量的測試,所以才敢跨這麼多版本升上去(跨這麼多版本主因是太貴了..)。 而此頁面主要分享一些心路歷程。 Setup InstallAnywhere InstallAnywhere 2015 - Register and Activate the Node-Locked License 在Product And License Center中修改HostID 在CentOS6上安裝InstallAnywhere2015所遇到的問題 Fix Troubles 這是資料夾Group Rule的Side Effect嗎? 升級IA後執行Linux Script的問題 升級IA後某些LIST變數在執行Silent模式遺失了 升級IA後Forward-Slash的安裝路徑,在Windows上無法正常反安裝 Without VM的Installer JVM Search Settings Use Plug-Ins - Extract to File 奇怪的Permission Issue on Linux Enable Debug Mode Upgrade Software With InstallAnywhere Detect Previous Version and Location Check Upgrade Version Keep Previous Variables When Upgrading Product Remove Previous Product of Installation Skip Input When Upgrading How to upgrade your product with InstallAnywhere? Q&A   Q. Node-Locked License與Standalone Build Node-Locked

How to upgrade your product with InstallAnywhere?

Problem 軟體升級是維護產品必經之路,而透過安裝程式升級,幾乎是大家都會使用的方式。InstallAnywhere在Premier版本提供了Upgrade功能,可以透過以下方式啟用它: 接著可以透過Check Running Mode去確認是否是在執行Upgrade: 對於安裝程式可以允許多個Feature各別安裝的使用者來說,在啟用這個功能後,相同版本就無法執行再次安裝了: 經過測試,在啟用Upgrade Mode後,Maintenance Mode沒有任何作用;面對這問題,我捨棄了IA所提供的Upgrade功能,自己去偵測是否要跑Upgrade流程。本篇文章主要分享我的心路歷程。 (我們使用InstallAnywhere 2015 Premier) How to? 在Upgrade Mode中,有兩個很好用的變數可以讓你取到安裝於系統的軟體版本與路徑,分別為$IA_UPGRADE_BASE_VERSION$、$IA_UPGRADE_BASE_LOCATION$;但如果沒使用Upgrade Mode,你就只能靠自己了。Pre-Install大致上會長這樣: 根據大家個別的軟體需求,會在反安裝前先做資料備份;在而Post-Install中,做資料還原或是Migration等。 在處理更新流程上,我針對可能會遇到的問題提供方法給大家參考: 如何偵測版本與安裝路徑? link 如何判斷是否要升級? link 如何延續前一次的安裝設定? link 如何在升級前先移除原本的軟體? link 如何略過不必要的輸入? link 如何在Pre-Install中放置script去協助升級? link 假如想要在反安裝時,在Linux上要製造出Uninstall..的效果,可以參考官方CustomCode IndeterminateConsole;它可以讓你在執行外部程式時,做出點點點的效果。

InstallAnywhere - Skip Input When Upgrading

Problem 在透過安裝程式執行軟體更新時,如果你是使用者,肯定不希望再輸入一次安裝路徑、帳號密碼等資訊吧? 在 先前文章 中,已經分享給大家匯入前次安裝參數的方式。本篇文章要分享略過不必要輸入的方法。 How to? 方法很簡單,只要透過Label就可以達成: 我在整個Pre-Install的最後,宣告名為Pre-Install-End的Label;接著在Upgrade的動作最後使用Jump To Action,指定到此Label。這樣就可以跳過Pre-Installation的相關動作了。

InstallAnywhere - Remove Previous Product of Installation

Problem 在啟用Upgrade Mode後,如果系統中有舊版本的軟體,IA會在執行安裝前幫你自動移除;如果不使用Upgrade Mode,這項工程就落到我們自己身上了。本篇文章分享在安裝過程中,移除舊版本軟體的方法。 How to? 首先要記得到Project>General Settings中關閉以下選項(假如很在意的話,就要寫CustomCodeAction去避掉這問題): 這選項會讓你無法在安裝過程中叫起反安裝程式。接著是移除軟體的動作,必須是在 確認符合更新條件 且在 匯入先前安裝參數 之後。而移除的方法很簡單,只要透過Execute Command並搭配silent mode參數去呼叫Uninstall程式: 以我的範例來說,$BASE_PRODUCT_LOCATION$是在 先前文章 曾提過的前一版本安裝路徑;Uninstall為反安裝程式;-i silent為silent mode參數。透過這個Command,就能讓安裝程式自己去移除先前軟體。 除此之外,要記得把第二個checkbox打勾,讓它真的完整執行後才會繼續下一個動作;而stdout、stderr、exitcode的部分也記得要改成專屬的變數名稱,用於發生問題時可以根據名稱追蹤原因。

InstallAnywhere - Keep Previous Variables When Upgrading Product

Problem 保留使用者設定是在Upgrade軟體時必要的動作之一。當你採用先反安裝再執行重新安裝來做軟體更新的流程時,要如何讓使用者不需再次輸入設定,又能直接使用他之前所輸入的內容呢? 舉例來說,我的安裝程式提供了三個Feature的安裝,但使用者先前只安裝其中一個;我該如何在執行更新時,只針對這個Feature安裝新版本呢? 本篇文章分享一個簡單達到此目的的方法。 (軟體本身設定是各自軟體需負責處理的,並不在本篇文章討論範圍) How to? 在IA安裝完軟體後,都會在反安裝程式的相同目錄下,產生installvariables.properties檔案;這個檔案會記錄安裝所使用的變數,包含你安裝哪些Feature、IA內建變數、使用者自訂變數等。 因此我們可以選擇在執行反安裝之前,使用Properties File Reader Action將它讀進來: 詳細設定可以參考以下: PROPERTIES_FILE_LOCATION必需指定到已安裝軟體反安裝目錄下的installvariables.properties,已安裝軟體的路徑可以參考先前文章。 PROPERTIES_TO_IGNORE用於略過檔案變數的匯入。由於我們會將密碼encode,因此在這裡匯入也沒用,必須另外處理;此外,像是版本號或是版本ID有變動的項目,並不適合匯入,這要記得設定上去。 接下來你就可以執行反安裝並略過需要手動設定的步驟了。 Reference Properties File Reader Action

InstallAynwhere - Check Upgrade Version

Problem 先前 曾分享抓取目標系統安裝軟體版本的方法。本篇要分享如何判斷是否滿足升級條件。 How to? 目前我們手上會有兩個變數: $PRODUCT_VERSION_NUMBER$: 當前Installer的軟體版本,這是在Project>General Settings中設定的。 $BASE_PRODUCT_VERSION$: 在先前文章中,透過讀取IA registry file所取得的變數。 內建的IA Rule,並沒辦法達到比較字串大小的作用;假如我使用script去處理,會比較不好維護。因此最後決定寫CustomCodeRule去達到這個目的,程式碼很簡單,供給大家參考: package org.tonylin.practice.ia.customcode ;   import com.zerog.ia.api.pub.CustomCodeRule ;   public class MatchUpgradeCriteria extends CustomCodeRule { @Override public boolean evaluateRule ( ) { String base_version = ( String ) ruleProxy. getVariable ( "BASE_PRODUCT_VERSION" ) ; if ( base_version == null || base_version. isEmpty ( ) ) { return false ; }   String installer_version = ( String ) ruleProxy. getVariable ( "PRODUCT_VERSION_NUMBER" ) ;   return installer_version. compareTo ( base_version ) >= 1 ; } } 最後就是在你要執行升級動作相關的Action去加入CustomRule: 假如你會重複使用這個Rule,也可以先設定一個Flag Variable去增加執行效率。 Reference Standar

InstallAnywhere - Detect Previous Version and Location

Problem 本篇文章分享在不使用內建Upgrade Mode情況下,如何偵測已安裝軟體的版本與安裝位置;因為偵測版本與安裝位置方法大同小異,所以我提供偵測版本方式就足夠了。 How to? 在Windows上通常都會使用registry,但Linux怎辦? IA在執行安裝完成後,會在系統中留下.com.zerog.registry.xml檔案,描述安裝資訊,其中就包含了版本與路徑。哪裡可以找到這個檔案? Windows: C: / Program Files / Zero G Registry / .com.zerog.registry.xml。 Linux: / var / .com.zerog.registry.xml 可以仔細看看product標籤的內容: 接著可以使用Read/Modify XML File的Action,去把內容讀出來。首先是根據$PRODUCT_ID$去把對應的product標籤的位置讀出來: 然後可以透過這個index位置去把版本與安裝位置給讀出來: 假如目標系統沒有安裝過你的軟體,取得的index會是空字串;如果在取得版本或安裝位置時,有可能會讓你讀到別人的產品內容。因此我們必須加Rule去避免這個問題: 之後就可以根據拿到的變數去做你需要的操作。 如果不嫌麻煩,也可以做CustomCodeAction去parse這個檔案。 Reference Read/Modify XML File Action Standard InstallAnywhere Variables

InstallAnywhere - Enable Debug Mode

Problem 會開始研究InstallAnywhere的Debug方式,是因為這陣子出現許多奇奇怪怪問題;但透過code review又無法找到原因,所以希望能透過InstallAnywhere的debug log找到root cause。 How to? 針對不同的階段Build、Install、Uninstall都有對應的debug方式,我感興趣的是Install與Uninstall的方法;而我的實驗是在linux上使用silent mode。 LAX_DEBUG=true 這個方法Install與Uninstall都適用,可以透過環境變數去啟用: LAX_DEBUG = true export LAX_DEBUG lax.debug.all與lax.debug.level 在使用LAX_DEBUG=true方法後,無法幫助我們找到問題原因,因此深入找尋其它可能管道。透過decompiler查看IAClasses.zip的內容: 得知lax.debug.all與lax.debug.level設定可以讓我們看到更詳細的debug訊息。以下分享啟用方式: (使用這兩個參數前,LAX_DEBUG需要被設置) Install過程 我嘗試過加在執行參數上,雖然dump出來變數內容有出現,但此debug功能沒有啟用: . / install.bin -Dlax.debug.all= true -Dlax.debug.level= 4 修改Installer參數 最後我是透過修改installer達成,如下圖,於Project>JVM Settings>Installer Settings>Optional Installer Arguments加入參數: 如果設置成功,在安裝時你可以看到Setting debug level to: 4的字眼。這個功能啟用後,會產生非常多debug訊息。 Uninstall過程 在我使用Install過程的方法後,我在Uninstall資料夾下的lax檔案中,有看到以下字眼: lax.nl.java.option.additional=-Dlax.debug.all= true -Dlax.debug.level= 3 這也使得反安裝時,會顯示level 3的訊息。 除了這個方法,還有兩種方式可行。一個是直接修改

InstallAnywhere - 奇怪的Permission Issue on Linux

Problem 這陣子安裝的自動測試,突然開始出現許多奇奇怪怪的問題。其中一樣,就是在某些Linux機器上出現腳本沒有執行權限: Review & Test 我們的安裝過程除了最後會針對所有執行檔去賦予權限外,沒有其它位置會將執行檔權限更改為可執行。然而,官方文件中有提及 Expand Archive 會賦予Default Permissions到解壓出來的檔案,下圖為我們Default Permissions: 因此我寫一個腳本每0.5秒polling一次解壓與複製後的同一檔案。下圖為安裝步驟: 而下圖為測試結果: 可以發現Expand Archive執行後一直到Copy Folder,解壓縮檔案都還沒被賦予可執行權限;但一秒鐘後,就擁有可執行權限。 除以上測試外,我還嘗試著在這些動作前後加上列出檔案權限動作,但此舉卻造成了Bug消失。另外這個問題是在某天之後發生的,差別只有檔案大小。 Current Solution 根據以上測試結果,可以推測: Expand Archive後的權限賦予屬於非同步執行。 zip檔案越大越容易發生這個問題。 因此最後我們採取的策略是,使用之前就賦予可執行權限: chmod +x executeScript.sh . / executeScript.sh

InstallAnywhere - Use Plug-Ins - Extract to File

Problem 在Pre-installation階段,installer會詢問使用者希望的軟體設定,而installer會檢查使用者的輸入;在這個階段中,也可能會檢查使用者環境是否符合預期。這些動作Installanywhre本身並不會完全提供,此時你可能會透過plugin、撰寫程式或腳本的方式去達到你的期望。本篇主要說明如何透過Extract to File去擷取你Installer中,預先寫好的程式或腳本。 How to? Add File To Installer 首先我們必須要把相依的檔案放到installer中,會使用到do_not_install的magic folder。如果installer中,還沒有加入此資料夾的,可以學我先加一個資料夾再選DO NOT INSTALL: 弄完後會長這個樣子: 再把你的檔案放進去就可以了。 Add Extract to File 在Pre-Install執行Add Action後,你可以在Plug-Ins中找到Extract to File: 加入後,如下圖,你會需要填入兩個值: ExtractToFile_Source: 如果把installer透過解壓程式打開,設定路徑位於InstallerData\Execute.zip\$IA_PROJECT_DIR$底下,可參考底下那張圖。以我的範例來說,這是加入DO NOT INSTALL的檔案。 ExtractToFile_Destionation:我的例子是將檔案放在temp目錄下。 以上,你就可以使用ExtractToFile_Destionation設定的檔案了。

InstallAnywhere - JVM Search Settings

Introduction 在 先前Without VM的Installer文章 中,提及可以使用search for vm與download from URL兩種方式獲取JVM功能。本篇文章目的為解決區分JVM版本的問題,而我的目的是希望能夠區分出openjdk與non-openjdk。 How to? Project > JVM Settings > Installer Settings 第一種方法可以讓你區別: Vendor: SUN、IBM、APPLE、HP。 VM type: ALL、JRE、JDK。 VM Version: 如1.7或1.8以上。 舉例來說: 格式必須為{vendor}_{type}_version。然而,由於openjdk的vendor也是oracle,所以這個方法沒辦法解決我的問題。 Note. VM type部分我實測也無法區分,但不是我要追的重點,所以略過它。 Build > JVM Search Settings 第二種可以根據JVM的屬性做搜尋,先看我選擇後的樣子: 在我的IA2015版本中,預設只有支援到1.7,而這個設定檔都位於IA_HOME/resource/jvms下。以我要新增linux下Oracle JDK 1.8為例,首先我將1.7的jdk複製為oraclejdk18.jvm與oracle_open_jdk18.jvm: (新增或刪除spec檔案後記得重新啟動IDE) 屬性的部分包含: JVM_PROPERTIES Standard與Open版本的JDK差別在於java.vm.name: Standard: JVM_PROPERTIES: java.vendor=Oracle... java.version=1.8... java.vm.name=Java HotSpot... OpenJDK: JVM_PROPERTIES: java.vendor=Oracle... java.version=1.8... java.vm.name=OpenJDK... Note. Oracle是在JDK7後將vendor從SUN改為Oracle。 PATH_HINT 由於我是從jdk7複製過來,所以我把7改成8就搞定了。 Summary 除了區分standard與open以外,還有幾點要考量: 是否允許使用1

InstallAnywhere - Without VM的Installer

Problem 把JVM和軟體包一起發布,是將side effect降到最低的方法。然而,Oracle打算開始追討授權費,也讓我們開始思考該怎麼發布軟體。如果用使用者安裝的Sun JVM是否能解決問題呢? 這我們不曉得;而另外一條路就是OpenJDK。然而OpenJDK的授權,也難以直接包裝於企業用軟體。因此還是要回歸到如何不包裝JVM,但安裝時有JVM可用的問題。 How to? 在InstallerAnywhere 2015 build tab中,可以看到VM Search Instructions設定。其中Without VM包含了搜尋現有與線上下載兩種模式: Download from URL 如上圖所示,你必須輸入一個URL,它可以是http也可以是ftp,但請確定server允許匿名存取;md5 hash驗證就看你是否需要,我是使用HashMyFiles去取得md5 hash值。實際執行build installer,從http下載結果: 從ftp下載結果: 不管是下載失敗或md5驗證沒通過,安裝最後都會結束。 Search for VM 首先可以從user guide的Locations on a Target System that Are Searched for JVMs中得知: Windows搜尋%PATH%與Registry。 Unix搜尋$PATH與某些固定放command line的路徑。 (下圖來自IA 2015 user guide) 如果你所需要的JVM為1.8以上,可以到Project > JVM Settings中,做如下圖的設定: Reference Oracle 開始追討 Java 授權費,企業客戶頭痛 MD5、SHA1、CRC32 驗證碼檢測工具-HashMyFiles v2.21 其它 以上方式只是告訴你在使用without VM去build installer後,當installer執行時獲得JVM的方法。然而在轉換這種方法後,installer是否會有其它side effect,就需要自行測試。畢竟user的環境是複雜滴~ 舉例來說,使用現有的jvm後,如果你的installer內原本會透過$lax.user.dir$$/$resource$/$jre$/$bin$/$java的方式去執行某些動作,就會有問題;

InstallAnywhere - 升級IA後Forward-Slash的安裝路徑,在Windows上無法正常反安裝

Problem 在Windows上,silent mode properties中的USER_INSTALL_DIR,建議使用double backward-slash去當分隔號: USER_INSTALL_DIR=C:\\Product\\Sub-Product1 然而有時為了和Linux一致,會改用: USER_INSTALL_DIR=C:/Product/Sub-Product1 透過2008產生的Installer使用起來相當正常,而在2015則會發生無法移除的問題: 在移除資料夾後,按新增移除程式的移除可能會發生以下錯誤: 發生這個問題後,我是直接刪除以下Registry好重新安裝: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${MyProduct} How to resolve? 在GUI模式下,即使你輸入forward-slash,InstallAnywhere也會強制把你轉成back-slash。如果把它列為使用上限制,還是有使用者會不小心踩雷;而且forward-slash不能用,有些難搞的使用者也會提出質疑。因此我最後想到的方法是,直接將forward-slash轉為back-slash。就我所知,有幾個方法可以達到我們這個目的: 透過Batch取代,將output轉入變數 Execute Custom Code 要使用Execute Custom Code,我們必須額外去implement java code,還要做包裝。我嫌麻煩,就挑了Batch去做取代的方式: 我的第一個方法,是直接將字串中的/取代為\後,就直接echo: @ echo off set INSTALL_PATH = $USER_INSTALL_DIR $ set INSTALL_PATH = % INSTALL_PATH: / =\ % echo % INSTALL_PATH % 但執行就是不成功,也發現log中的路徑後有跳行符號。我推測可能是echo的原因,所以調整了script,讓輸出不會跳行: @ echo off set INSTALL_PATH = $USER_INSTALL_DIR $ set INSTALL_PATH = % INSTALL_PA

InstallAnywhere - 升級IA後某些LIST變數在執行Silent模式遺失了

Problem 在我們的測試案例中,有透過silent mode餵參數方式給Installer。但在更新到2015後,發現某些參數並沒有到達預期的效果。經過trace,問題是發生在LIST變數的assignment上: 以我的例子而言,AGENT_PORT_LIST是一個LIST變數。在經過某個步驟後,使用者所輸入的三個值會被assign到此變數中,而Set Variable的動作會將三個值分別assign到三個變數中。而在silent mode中,AGENT_PORT_LIST是沒被初始化的。根據測試結果,2008會略過這無效的assignment,而2015會將變數變為空白。 How to resolve? 這問題我想到幾個解法: 先確認LIST變數是否存在,存在才做assignment。 silent mode略過這些動作。 由於我們一開始就已經把UI動作分成GUI與console的group,又要避免發生我們沒預期到的問題。所以我選擇在silent mode時,略過GUI與console的group: 後記 後來某個Installer突然發生某些檔案消失的情形,這是在修改這bug後所導致的。後來經過同事trace,差別在於有問題的Installer,有打勾Build Configurations>Distribution>Optimized的項目: 這是為了在build installer時,各自平台的Installer只會包自己所需要的東西。然而在build的時候,可能是相當於silent mode情形,是什麼樣的字串我們沒有深究。最後是根據user guide建議,將判斷改成不等於SILENT。

InstallAnywhere - 升級IA後執行Linux Script的問題

Problem 本來以為升級已經完成,結果在Linux上,發現執行某些script的動作會無效。 How to? 經過trace,發現script內如果有宣告與使用變數,都會不正常。後來發現2015比2008版本多了Do not substitute unknown variables的checkbox。 看了一下官網資料,預設Do not substitute unknown variables是不打勾的。如果IA發現了沒宣告過的變數,就會取代為空白,而linux中的變數都是透過$開頭,所以會造成什麼結果呢? 舉例來說: JAVA_PATH = " $INSTALLED_JVM_PATH $" echo $JAVA_PATH if [ -e $JAVA_PATH ] then echo true else echo false fi $INSTALLED_JVM_PATH$是我在IA宣告的變數,假設為/opt/jre/bin/java。在沒打勾的情況下,因為$JAVA_PATH不是IA宣告的變數,就會從$開始往後取代為空白: JAVA_PATH = "/opt/jre/bin/java" echo JAVA_PATH ] then echo true else echo false fi 最後打勾就解決了。我這個案例是發生在linux script上,但是不代表在windows batch不會發生問題。只要你script內有$,就要記得打勾這選項。 友藏內心獨白: 要來好好review了! 如果懶的review,就寫程式針對以下設定改為true試試吧,不過要注意不是每個變數都需要做這事情喔! <property name = "substituteUnknownVariable" > <boolean > false </boolean > </property >

InstallAnywhere - 這是資料夾Group Rule的Side Effect嗎?

Problem 在安裝過程中,我們希望某個安裝資料夾的動作,只有在不存在的時候才會執行。在IA2008中,我們使用了Check File/Folder Attribute的rule: 然而這樣的做法在IA2015中,會讓目錄下的安裝動作不會被執行。根據安裝Log內容與做了一些小實驗,我推測這是因為底下的安裝動作,繼承了Parent的rule,且發現資料夾已經被建立了而不會繼續執行。 How to? 針對這問題,我直接使用安裝檔案本身提供的功能,去讓它存在時就不覆蓋: 如果要找尋其它地方是否有使用,可以直接透過Rule類別名稱去搜尋: com.zerog.ia.installer.rules.FileFolderPathChk。

在CentOS6上安裝InstallAnywhere2015所遇到的問題

Problem 從IA2011開始,IA開始透過FlexNet Node-Locked Licencing的方式。你必須到它的Product And License Center註冊機器的Host ID(MAC),並下載license檔案給IA程式啟用。這意思就是要綁定你使用的機器,不讓你用一組序號輸入就爽爽用。 而我在CentOS6上發生了啟動失敗的問題。 How to resolve? 後來直接寫信給它們的Technical Support(support_flexerasoftware.com),他們要求我提供一些debug訊息。而我在FAQ看到一些線索,例如在安裝目錄下的console.txt內出現: Trying to checkout IACE version = 17.0 Library for Native Hostid Couldn 't Be Loaded (-521,7024) 另外在信件來回過程中,我也發現這是由於GLIBC版本所造成的問題: > ldd . / InstallAnywhere 2015 / resource / fnp / libraries / liblmgr11.so . / liblmgr11.so: / lib64 / libc.so.6: version ` GLIBC_2.14 ' not found (required by ./liblmgr11.so) linux-vdso.so.1 => (0x00007ffff20c5000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f560e634000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f560e417000) libc.so.6 => /lib64/libc.so.6 (0x00007f560e082000) /lib64/ld-linux-x86-64.so.2 (0x0000003759000000) CentOS6上的GLIBC版本為2.12,除非更新到CentOS7才能使用2.17版本。只是這是我們的build sy

InstallAnywhere - 在Product And License Center中修改HostID

在啟用InstallAnywhere之前,必須上Product And License Center去透過Host ID產生license file。因為第一次使用,所以就冒出這樣的念頭: 如果我要換機器要怎麼辦? 而好死不死,剛好看到一個return按鈕就點下去了: 後來我還很開心的說: 耶! 可以隨便改Host ID耶。後來再隨便註冊了一台我的筆電,就發生了無法return的慘劇: 當然我就直接寫信請Technical Support幫忙處理。不過也在FAQ中發現以下描述: Note that there is a limit to the number of times that you can return a license: you can return a license only one time per entitlement per year. 所以請記得: 先決定好要使用的機器再去Activate License。 PS 1. 上面的圖示只是範例,所以License的種類對不起來。 PS 2. 我信件內容主要告知我是第一次使用,且不知道這條規定,希望它們能夠幫忙重置。後來是有把Return按鈕還給我了,但無法把它變回我還沒使用前的情況。

Net-SNMP with SNMPv3 Trap

Introduction 記錄在CentOS上設定Net-SNMP能轉發SNMPv3 Trap的方法。 How to? 撰寫這篇文章時,CentOS7的Net-SNMP最新版本為5.7.2,並不支援SHA2;CentOS8的Net-SNMP為5.8,支援SHA2,因此以下實驗結果為5.8的版本。其中大部分command來自於reference中,有興趣可以自行查看: /etc/sysconfig/snmptrapd 先加debug log: OPTIONS = "-Lsd -Lf /var/log/snmptrapd.log" 之後可以執行以下cmd去看接收trap結果: tail -f / var / log / snmptrapd.log /etc/snmp/snmptrapd.conf createUser -e 0x8000123acd1ab43abbfff000fa opsviewv3 SHA mySecureAuthPassword AES mySecurePrivPassword createUser -e 0x80001370010a921096 opsviewv4 SHA- 224 mySecureAuthPassword AES mySecurePrivPassword authUser log,execute,net opsviewv3 authUser log,execute,net opsviewv4   createUser -e 0x8000000001020505 ovirtengine MD5 authpass AES privpass createUser -e 0x8000000001020606 NoAuthNoPriv authUser log,execute,net NoAuthNoPriv noauth authUser log,execute,net ovirtengine   forward default 10.146.125.32 Note. 有發現如果opsviewv3設定過SHA,再設定為SHA-224會沒用,要用snmpusm去砍user。 test commands snmptrap -e 0x8000123acd1ab43abbfff000fa -v 3 -u