我的烏拉拉練功坊

請來參觀移植到 Google Firebase 的成績 https://oolala.xyz/ken73chen/

2014年5月17日

FreeBSD 的 pkg 心得

現在繼續使用 FreeBSD 的 ports 安裝東西的話,就會不斷的看到訊息,提醒你改用 pkg (pkgng):

If you want to switch to the new pkg(8) format, and have not already done so,
there are some extra 1-time steps to take:

    Enable PKGNG as your package format:

        # echo 'WITH_PKGNG=yes' >> /etc/make.conf

    Then convert your /var/db/pkg database to the new pkg format:

        # pkg2ng

所以你要換到  pkg,就依照上面的步驟做一次就好。

結果我碰到底下這個錯誤,Google 了一下,似乎蠻多人遇到過的,但是網路上面的解決方法,有些人有用,有些人一樣會遇到,我是屬於後者,還是一樣遇到的那一群。

http://pkg.FreeBSD.org/freebsd:9:x86:64/latest/digests.txz: No address record 

最後當然還是解決了,所以來記錄一下。



首先,先把 FreeBSD 升級到 production 的版本,可以看這裡, 目前是 8.4、9.2 或者 10.0,這和 pkg 沒有絕對的關係,不過換到一個合理的版本是應該的。

換好之後,確定一下系統有沒有 pkg 了:

root@proxy1:~ # whereis pkg
pkg: /usr/sbin/pkg /usr/local/man/man8/pkg.8.gz /usr/ports/ports-mgmt/pkg

有的話,確定一下 pkg 的版本:

root@proxy1:~ # pkg -v
1.2.7_2

不要使用比這個還要舊的版本,接著,如果你以前自己從 ports 裡面安裝過 pkgng 來使用,那麼就會遇到我碰到的問題,請刪除 /usr/local/etc/pkg.conf,或者將內容清空:

root@proxy1:~ # ls -al /usr/local/etc/pkg*
-r--r--r--  1 root  wheel     0 May 16 05:13 /usr/local/etc/pkg.conf
-r--r--r--  1 root  wheel  1026 May 16 05:00 /usr/local/etc/pkg.conf.sample
-r--r--r--  1 root  wheel  1026 Apr 30 23:37 /usr/local/etc/pkg.conf~

根據常識,pkg 是在 /usr/sbin 底下,所以它的設定一定是在 /etc 底下會有:

root@proxy1:~ # ls -al /etc/pkg
total 10
drwxr-xr-x   2 root  wheel   512 May 16 05:11 .
drwxr-xr-x  21 root  wheel  2560 May 16 05:42 ..
-rw-r--r--   1 root  wheel   436 May 16 05:11 FreeBSD.conf
-rw-r--r--   1 root  wheel   444 May 16 05:10 FreeBSD.conf~

檢查到這邊,都沒問題的話,就可以用 pkg 了,基本上,看一下 handbook 就會用了,或者執行 pkg,看一下說明也會用。

最後,你一定會想用 pkg upgrade 享受一下升級,因為現在是 binary 的,所以升級就快很多了。

不過,可能還會遇到一個 Perl 版本衝突的錯誤,訊息很長一串,大概像這個樣子:

pkg: WARNING: locally installed perl-5.12.4_4 conflicts on /usr/local/man/man1/ptardiff.1.gz with:
        - perl-5.14.2_2

pkg: WARNING: locally installed perl-5.12.4_4 conflicts on /usr/local/man/man1/s2p.1.gz with:
        - perl-5.14.2_2

pkg: WARNING: locally installed perl-5.12.4_4 conflicts on /usr/local/man/man1/shasum.1.gz with:
        - perl-5.14.2_2

pkg: WARNING: locally installed perl-5.12.4_4 conflicts on /usr/local/man/man1/splain.1.gz with:
        - perl-5.14.2_2

pkg: WARNING: locally installed perl-5.12.4_4 conflicts on /usr/local/man/man1/xsubpp.1.gz with:
        - perl-5.14.2_2

你的訊息和我的不一定一樣,反正就是版本衝突的錯誤,這時候,移除你本來安裝的那一個 Perl:

pkg remove -f perl-5.12.4_4

記得要用 -f 強制移除,接著再重新 pkg upgrade,pkg 會自己安裝它想要的那一個 Perl。

然後,應該就不會有問題了。