日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Gentoo Linux: /var/db/pkg 这个文件夹很重要![转]推荐阅读

發布時間:2025/3/15 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gentoo Linux: /var/db/pkg 这个文件夹很重要![转]推荐阅读 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來自 http://www.aiview.com/2008/03/gentoo_linux_deleted_var_db_pkg.html

前段時間折騰tmpfs 文件系統,不小心弄丟了/var/db/pkg 下面所有的文件,在查資料的過程中,才了解這個文件夾的重要。

這個文件夾對于Gentoo 的作用,相當于Windows 應用程序的Uninstall 文件,所有通過Portage 安裝的程序包信息都保存在這,每個程序包包含哪些文件,以及文件的路徑信息是最重要的,缺少這些信息,將無法正常的卸載程序包,其他一些重要的信息丟失也 導致Portage 系統混亂。

這個文件夾丟失,雖然系統中的應用程序可以照常運行,但卻是最大的災難,除非不再打算通過Portage 對包進行任何維護工作,比如升級,安裝新的軟件等。解決方法只有一個:重新merge 所有軟件包,重新生成這部分信息。一般來說,系統中軟件包的規模在幾百,甚至上千個,里面還有一些重磅角色,全部重新編譯一遍,可能需要幾十個小時 (OpenOffice 在我的T43 上花去10個小時進行編譯)。

文件夾丟失后,我最初找到了這個討論(en),參考hielvc 寫的腳本, 希望通過讀取/var/log/emerge.log 恢復丟失的信息,但這個方法只能恢復出系統中所有已安裝軟件包名稱和版本信息,無法找回已安裝文件的列表,能不能通過某個Gentoo 工具得到每個軟件包默認的文件列表呢,答案應該是不可以,因為Gentoo 是一個定制性的系統,大部分文件都是編譯后生成的,并沒有一個默認的庫能夠告訴這些文件的具體信息。換句話說,我的/var/db/pkg 是唯一的,如果沒有備份,只能重新編譯一遍系統來生成它們,下面這個討論中,didymos很清楚的解釋了這個問題,也證實了我的想法:PANIC! I deleted /var/db/pkg

所幸,在把我的/var/db/pkg 放入內存之前,我留下一個備份,但隨后,我merge了約50個軟件包,這些信息被寫入內存中的/var/db/pkg ,隨后就在一次重啟后徹底丟失了。

在具有備份的情況下,我使用以下步驟重建了/var/db/pkg,時間成本主要花費在重新merge 約50個軟件包。

步驟恢復備份的/var/db/pkg 文件夾

恢復之后,/var/db/pkg 代表了merge 50個包之前我的系統的狀況,但我的系統實際多出了一些包,或者一些已存在包的升級。 ?

找出/var/db/pkg 與實際系統的不一致

前面提到的hielvc 寫的腳本可以派上用場,但hielvc 忽略了一些情況(emerge -> unmerge -> emerge again),結果可能并不準確,我重寫了一個腳本rebuildpkgdb,用法:

# ./rebuildpkgdb -pThis is a dry-run, Nothing really changed.Done! Please check package.lst

這將得到系統中實際安裝的所有包列表(包含版本),再使用下面命令獲取/var/db/pkg 記錄的列表。

# ?find /var/db/pkg/ -type d |cut -d/ -f 5- |awk -F/ 'NF > 1' |sort > package.db

然后比較兩個文件,找到以下包:

  • 存在于package.lst,但不存在于package.db

  • 存在于package.db,但不存在于package.lst

  • 都存在,但版本不同(取 package.lst)

  • 對于第一種情況,是因為我在/var/db/pkg 丟失之后,unmerge 了一些包,雖然emerge.log 顯示unmerge 成功,但因為丟失/var/db/pkg,實際文件并沒有從文件系統真正刪除。

    而后兩種情況是我備份/var/db/pkg 之后,丟失的信息。

    因此對于上面三種情況,都執行一次merge 即可。

    remerge

    將上個步驟取得的包列表格式化成類似下面的命令,重新merge一遍,這個過程將重建正確的/var/db/pkg。

    # sudo emerge -av =app-admin/eselect-ctags-1.3 =app-admin/eselect-wxwidgets-0.8 \
    =app-admin/sudo-1.6.9_p14 =app-editors/emacs-22.1-r3 ...These are the packages that would be merged, in order:Calculating dependencies... done![ebuild ?N ? ?] sys-fs/mtools-3.9.10 ?USE="X" 0 kB [ebuild ? ? U ] kde-base/kpdf-3.5.9 [3.5.8] USE="xinerama -arts -debug -kdeenablefinal" 0 kB [ebuild ? ? U ] kde-misc/krusader-1.80.0-r1 [1.80.0] USE="xinerama -arts -debug -javascript -kde" 0 kB [ebuild ?N ? ?] sys-boot/syslinux-3.52 ?0 kB ?...Total: 49 packages (42 upgrades, 6 new, 1 in new slot), Size of downloads: 3 kBWould you like to merge these packages? [Yes/No]檢查系統

    列出那些在/usr/lib/portage/world,但不在/var/db/pkg 中的軟件包:

    # emaint --check world

    如果上面命令找到了任何包,那么應該先merge 它們,如果事實不需要它們,再進行unmerge ,這樣可以保證world, /var/db/pkg/, 以及文件系統三者的一致性。

    revdep-rebuild

    最后執行revdep-rebuild 查找系統中的任何共享庫以及依賴關系的缺失,如果需要,會自動merge 需要的軟件包。這個命令可能需要運行多次,直到沒有任何問題發現為止。

    # revdep-rebuild如果沒有/var/db/pkg 備份

    這是個很不幸的狀況,如果真正希望world, /var/db/pkg/, 以及文件系統這三者具有一致性,那么似乎沒有別的選擇,找個空閑時間依次執行下面的命令,來重建/var/db/pkg ?

    # emaint --check world# emerge -e system# emerge -e world# revdep-rebuild

    這個過程可能很漫長,視機器的速度,如果有其他Gentoo 系統可以利用,那么可以嘗試分布式編譯來節省時間。

    延展閱讀

    Gentoo Linux文檔 -- Portage入門

    Gentoo Forums :: 閱讀主題 - PANIC! I deleted /var/db/pkg

    Gentoo Forums :: 閱讀主題 - deleted /var/db/pkg [solved]

    HOWTO Use Portage Correctly - Gentoo Linux Wiki

    GF16: Corrupt or empty world file, what do I do?

    轉載于:https://blog.51cto.com/axlrose/1287450

    總結

    以上是生活随笔為你收集整理的Gentoo Linux: /var/db/pkg 这个文件夹很重要![转]推荐阅读的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。