|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2004-07-03, 11:18 PM | #1 |
榮譽會員
|
FreeBSD下面用Linuxthread來編譯mysql
兩種方法
1.是直接make ports裡面的mysql-server 在port下面 env BUILD_STATIC=yes WITH_LINUXTHREADS=yes BUILD_OPTIMIZED=yes make install clean就可以 2.因為port的更新不夠快,而且喜歡自己編譯的,那就手動來 首先去安裝linuxthread的port,這個沒必要自己來做吧 cd /usr/ports/devel/linuxthreads make install clean 接著下載的mysql src tar zxf mysql-version.tar.gz cd mysql-version ./configure --prefix=/usr/local/mysql --without-debug --without-readline --without-bench --without-extra-tools --with-libwrap --with-vio --enable-thread-safe-client --enable-assembler --with-extra-charsets=latin1,latin2,gb2312,gbk,big5 --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-named-thread-libs='-DHAVE_GLIBC2_STYLE_GETHOSTBYNAME_R -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads -L/usr/local/lib -llthread -llgcc_r' CC=gcc CXX=gcc CFLAGS="-pipe -mcpu=i686 -D__USE_UNIX98 -D_REENTRANT -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads -O3 -fno-omit-frame-pointer" CXXFLAGS="-pipe -mcpu=i686 -D__USE_UNIX98 -D_REENTRANT -D_THREAD_SAFE -I/usr/local/include/pthread/linuxthreads -O3 -fno-omit-frame-pointer -felide-constructors -fno-rtti -fno-exceptions" gmake gmake install-strip configure的參數自己調調 |
送花文章: 3,
|
2006-01-26, 04:20 AM | #2 (permalink) |
榮譽會員
|
用DOS指令破除UNIX管理員密碼
對於廣大的SCOUNIX操作系統管理員來說,最不可原諒的過失之一就是忘記了 管理員密碼(即超級用戶密碼)。這個過失會導致極其嚴重的後果,對此凡是具備UNIX 操作系統常識的人都應該知道。然而令人遺憾的是,時至今日鑄錯者依然大有人在。看 來,對他們固然要責備,但既然問題客觀存在,我們就總還須面對現實,想辦法去解決才是。 長期以來,許多人就超級用戶密碼被忘記的問題發表了各種看法。一部分人認 為,一旦忘記了超級用戶密碼,只能重裝操作系統,此外別無它法。另一部分人則堅決 反對這種"重裝論",他們提出了一些經過成功實踐的解決方案,使得"重裝論"者敗下陣來。現在我們可以肯定地說,忘記超級用戶密碼是有辦法解決的。 但同時我們也不得不承認,現行的解決方案有很大的局限性,這些局限性決定了現有方案無論怎樣變化和發展也不可能成為一種有著強大生命力的最徹底的解決方案。 傳統解決方案的局限性 上面已經談到,目前有多種針對超級用戶密碼被忘記問題的解決方案。為了敘述上的方便,本文將這些方案統稱為傳統解決方案。傳統方案乍看起來似乎各不相同,但必須有一套(兩張)EmergencyBootFloppy(緊急啟動軟碟)。這套軟碟均為文件系統 格式,必須在SCOUNIX上製作,並且在不同檔案類型電腦上製作的緊急啟動軟碟相互不能通用。用緊急啟動軟碟啟動後,將硬碟根文件系統mount到某個目錄下(一般為/mnt目錄),然後進入該目錄(即進入硬碟根文件系統的根目錄),修改相關目錄下與超級用戶密碼有關的訊息(各種方案的不同之處主要體現於此)。最後回到軟碟根目錄,拆卸/dev/hd0root,重啟機器。 這些共同點實際上反映了傳統方案的局限性: 一、操作平台局限性:要求自始至終必須在SCOUNIX操作系統平台上實施。 二、操作工具局限性:對緊急啟動軟碟的依賴性太大。萬一軟碟發生損毀,必須找一台檔案類型相同的機器再製作一套,這就是前面所說的"專盤專用"的限制。 三、操作對像局限性:必須依靠硬碟根文件系統的支持。即操作者與修改對像(指與超級用戶密碼有關的訊息)被文件系統隔開,操作者不能直接修改對象,只能使用文件系統提供的服務修改。這種方式本是訊息科學中倡導的層次化思想的一種體現,在 正常情況下應予稱道;但任何事物都是有兩面性的,在非常情況下--諸如解決忘記超級用戶密碼這一類問題時--該方式反而有可能帶來麻煩。 三大局限性說明了傳統解決方案可行性的脆弱和狹窄,也決定了它們作為凌駕於文件系統之上的高層方案所必然具有的弊端。於是,打破這些局限性,探索出一種全新的解決方案,就成為了擺在一切UNIX研究者面前的新課題。 所謂新課題,就是找到一種能夠突破傳統方案局限性的新方案。究竟從何處下手呢?讓我們再來看一看三大局限性。 操作平台局限性似乎不好突破,因為其它操作系統識別不了UNIX的文件系統格式。 操作工具局限性好像就更難了,因為緊急啟動軟碟既要在UNIX上製作,又要在UNIX上使用,所以如果操作平台局限性突破不了,它就更突破不了。最後看看操作對像局限性。操作對像完全由文件系統管理,操作者必須通過文件系統訪問它們。萬一文件系統崩潰,那麼即使它下面的文件完好無損,操作者也只能認為這些文件已全部丟失掉--因為文件系統無法訪問(例如mount不上來)。其實這個時候還是有辦法找到那些文件的,方法就是直接訪問物理硬碟。道理很簡單:就本質而言,文件系統只不過是一個構築於物理硬碟之上的邏輯組織,平時我們是通過它來訪問物理硬碟的;現在這個組織壽終正寢,不能再為我們服務了,於是我們只好"自己動手,豐衣足食"。直接訪問物理硬碟不但可以使文件"失"而復得,而且還有另外一個重要意義--突破了操作對像局限性。 操作對像局限性一旦突破,我們就會驚奇地發現突破另外兩大局限性簡直可以說是順理成章了。因為雖然其它操作系統識別不了UNIX的文件系統格式,但在任何操作系統上,我們都可以訪問物理硬碟;而只要是帶有訪問物理硬碟功能的軟體,都可以成為我們的操作工具。 現在我們要做的僅僅是:找一個大家最熟悉的操作系統和一個最易尋覓的可以訪問物理硬碟的軟體。 大家最熟悉的操作系統無疑是DOS。可以訪問物理硬碟的軟體很多,但最易尋覓的莫過DEBUG.EXE。所謂最易尋覓,是因為DEBUG是DOS本身的一條外部指令,可以說只要是在安裝了DOS的電腦上都可以找到它。對DEBUG略知一二的人可能會指出該指令並 沒有提供訪問物理硬碟的選項,但請不要忘記DEBUG是DOS提供給用戶的一個彙編語言偵錯程序,我們完全可以利用它編寫、偵錯和執行一個彙編小程序去訪問物理硬碟。應該說,這對一個能夠取得系統管理員身份的人並不困難。 綜上所述,在DOS上執行DEBUG來破除UNIX管理員密碼,這就是本文提出的解決SCOUNIX超級用戶密碼被忘記問題的新方案。 新方案的套用新方案已經提出,下面我們來看看它是如何套用於實踐的。 ----DA0500H表示第一個資料塊位址。由於其它12個資料塊位址均為0,所以可斷定根目錄在硬碟上只佔了一個資料塊。現在我們必須依據DA0500H計算出這個資料塊存放在硬碟的第幾磁柱、第幾磁頭、第幾扇區。計算公式如下: C=TRUNC(P/(H*S)) C1=C0+C H1=TRUNC((P-C*H*S)/S) S1=P-C*H*S-H1*S+1 ----其中: ----C1、H1、S1分別為資料塊物理位址磁柱號、磁頭號、扇區號 ----P等於資料塊位址翻譯成十進制數後再乘以2 ----H為硬碟磁頭數 ----S為每磁頭扇區數 ----C0為根文件系統起始磁柱 ----C只是一個中間量 ----將DA0500H代入上述公式,並根據H=64,S=32,C0=2,可算出C1=3,H1=29,S1=21。因此根目錄在硬碟上的物理位址為:3磁柱29頭21扇。 ----用app把它讀出來( CX和DX的賦值應分別改為"0315"和"1D80")。 ----讀出後用"dump"指令檢視,可以發現偏移1050H至105FH是/etc目錄的i-node號和檔案名,其中i-node號為22H,即34D。因為每個扇區有8個i-node,所以34號 i-node必定在2磁柱0頭9扇。 ----用app讀出它(CX和DX的賦值分別改為"0209"和"0080")。 ----用"dump"指令可看出偏移1040H至107FH正是/etc目錄的i-node。我們把它的資料塊也讀出來。先計算第一個資料塊的物理位址。將2D0700H代入公式,算出/etc第 一個資料塊物理位址是3磁柱50頭27扇。 ----用app讀出它(CX和DX的賦值分別改為"031B"和"3280")。 ----用"dump"指令可看出偏移11A0H至11AFH是/etc目錄下的passwd檔案名。我們用"enter"指令把它改成zls,然後再執行app(AX的賦值應改為0301)。 ----現在結束DEBUG指令。 ----取出軟碟,重啟機器,啟始UNIX操作系統。 ----按照啟始順序,UNIX顯示出硬體配置資訊後就該提問超級用戶密碼了,但就在此時它卻突然發現/etc/passwd文件失蹤了!(其實只是被改名為zls,但UNIX對此一無所知。)沒有了這個文件,UNIX無法提問超級用戶密碼,於是它只好在螢幕上顯示如下 : 訊息並允許用戶以系統管理員身份直接進入系統維護態: su:Unknownid:root /etc/tcbck:file/etc/passwd ismissingorzerolength /etc/tcbck:eitherslash(/)ismissingfrom /etc/auth/system/filesortherearemalformedentries in/etc/passwdor/etc/group /etc/smmck:restoremissingfiles frombackupordistribution. INIT:SINGLEUSERMODE ****PASSWORDFILEMISSING!**** EnteringSystemMaintenanceMode # ----進入維護態後,當然就可以"為所欲為"了。但最好先設定一個新的超級用戶密碼。要想這樣做,首先必須恢復passwd檔案名。 #mv/etc/zls/etc/passwd ----然後,就可以用/bin/passwd指令設定新的超級用戶密碼了。 結束語 ----在本文行將結束時,我們再來作一個小小的總結。 ----傳統方案有操作平台、操作工具和操作對像局限性。新方案則突破了這三大局限性。 ----一、新方案突破了操作平台局限性。傳統方案的操作平台必須是UNIX,而新方案則是DOS。DOS比UNIX普及得多,中國的絕大部分電腦用戶對UNIX陌生,但對DOS卻相當熟悉,使用起來也有親切感。 ----二、新方案突破了操作工具局限性。傳統方案的操作工具必須是兩張緊急啟動軟碟,而新方案僅使用一張DOS系統碟,其上只需拷貝一個DEBUG.EXE文件。緊急啟動軟碟只能專盤專用,DOS系統碟卻不存在這個問題--用任何一台電腦上的DOS製作出的系 統盤,可以用來解決任何一台電腦上的UNIX超級用戶密碼被忘記的問題。至於用來訪問物理硬碟的軟體,當然更不是非DEBUG不可,任何軟體--只要支持訪問物理盤--均可。作者推薦使用Norton8.0軟體包裡的diskedit程序,對不懂彙編語言編程的人來說該程序無疑是一個最好的選項。 ----三、新方案突破了操作對像局限性。傳統方案的操作對象是文件系統管理下的文件,而新方案撇開了文件系統,直接在底層修改資料。 ----最後需要說明的是,對於SCOOpenServerRelease5,因條件所限,作者還沒有使用過,所以關於新方案在該版本上執行時步驟是否需要修改以及如何修改的問題,如果有機會,作者會加以適當的補充。 首先需要指出,由於文章篇幅和性質的限制,本文不可能將新方案實施程序中涉及到的所有知識以"入門講座"的方式加以介紹。因此,在閱讀本小節前,讀者應具備下列基礎:熟悉硬碟主啟始扇區和UNIX分區及UNIX文件系統的構造(這對UNIX系統管理員來說不成問題)、瞭解中斷13H入口參數含義、使用過DEBUG指令。一台COMPAQDESKPROXL/466伺服器,主機板內含PCISCSI-2控制器一個,上接富士通硬碟一隻,該硬碟主要參數為:1041磁柱,64頭,32扇。硬碟上裝有SCOUNIXSystemV/386Release3.2operatingsystemVersion4.2。現在假設其超級用戶密碼被忘記。首先,隨便找一台安裝了DOS的電腦,製作一張DOS系統碟,並在系統碟上拷貝一個DEBUG.EXE文件。 C:\DOS>format/sa: C:\DOS>copydebug.exea: ----然後將該盤插入COMPAQ伺服器A驅,開機啟動DOS操作系統,執行DEBUG指令。 A:\>debug 現在我們就編寫一段彙編語言程序(以下簡稱app),來讀出硬碟0柱0頭1扇區的內容。該扇區存放的是硬碟分區表,讀出它是為了確定SCOUNIX分區的起始位置。app是使用中斷13H實現的,以後我們還要反覆用到它,當然入口參數將隨所讀內容物理位址的變化而變化。 -a 2039:0100MOVAX,0201 2039:0103MOVBX,1000 2039:0106MOVCX,0001 2039:0109MOVDX,0080 2039:010CINT13 2039:010EINT20 2039:0110 -g Programterminatednormally 現在我們可以用"dump"指令檢視被讀到記憶體裡的扇區內容。從偏移11BEH處開始是分區表,其中檔案類型標誌字元為63H的分區是SCOUNIX分區。該分區起始於1磁柱0磁頭1扇。 下面,讀出UNIX根文件系統i-node表的第一個扇區,以確定根目錄的物理位置。 根據UNIX分區起始位置可知根文件系統始於2柱0頭1扇。並且,由於2柱0頭1扇是啟始塊,2扇是超級塊,3、4扇為間隔,所以i-node表必定始於第5扇。 我們用app讀出它(CX的賦值應改為"0205")。 讀出後用"dump"指令檢視偏移1040H至107FH的64個字元,這就是2號i-node,即根目錄的i-node。 ----下面我們就根據i-node計算根目錄在硬碟上的物理位址。 ----我們從偏移1040H看起: ----ED41H表示檔案類型與存取權限為"drwxr-xr-x"; ----1000H表示文件連結數為16; ----0000H表示文件屬主ID為0; ----0200H表示文件組ID為2; ----80020000H表示文件字元數為640個; |
__________________ |
|
送花文章: 3,
|