Home » Computer » Software » Archive by category "OS" (Page 44)

Intel iMac 上執行 Linux

Intel-based Mac 上已經可以從 開機了,不過要從 USB 硬碟:

Using elilo and a modified Linux kernel, we can boot from a USB hard disk on the 17" iMac Core Duo. We are using the hacked vesafb driver to inherit the bootloader's framebuffer, keyboard and a USB network card work. Gentoo runs and can compile the Linux kernel.

網站在:xbox-linux.org/mactel/index.php/Main_Page,目前因為 的關係,網站速度很慢,你可以透過 連:xbox-linux.org.nyud.net:8090/mactel/index.php/Main_Page

這是開機的畫面:

FreeBSD jail 下的瑣事

這幾天又再弄 jail,遇到一些瑣事,想到就順便記下來。像是 jail 弄好之後發現沒有帳號可以登入,在 jail host 上:

cd /jail_path/etc
vim master.passwd
pwd_mkdb -d . master.passwd

其實也可以這樣:

vipw -d /jail_path/etc

不知道現在的書還會不會教這些...

管理一堆 FreeBSD 的方法

本來是放在 的,想了一下還是這邊也放一份好了,如果有什麼意見的話麻煩提供一下 :p

以前在計中弄二三十台 FreeBSD 的時候就是用 screen + portupgrade 一次把幾十台機器升級,升級完整個重開機就好了,不用管什麼東西升級完要重跑。安裝新軟體如果需要指定 WITH_BLAH=yes 或是其他的東西,記得到每台上面的 /usr/local/etc/pkgtools.conf 改一下。(以前的 ports 還沒有 OPTIONS 這個功能)

這個模式在我一個人管的時候很好,但是當要傳承的時候就糟糕了:要瞭解這種方法的人大概都需要玩過一陣子 FreeBSD,知道只靠系統基本的套件管理是不夠的,才會有感覺。D2 上面是到了 ronnywang 才接下去。現在在交大資工當系計中助教也遇到同樣的問題。

一種想法是利用 package 更新 (這個在將 ccbsd*.csie.nctu.edu.tw 重灌成 FreeBSD 6 已經實行一段時間了),但目前最大的問題在於使用 package 會:

  • 無法善用每台機器的 CPUTYPE。
  • 某些 ports 無法產生 package,像是 screen (技術問題)、jdk (授權問題)。

另外,有時候會發生套件安裝好,但是無法產生 package 的慘劇。這個方法其實問題還蠻多的。

我昨天又想到了另外一個作法,我不知道可不可行,不過看起來會比原來的方法好,但是重新安裝機器時的速度一定會比 package 的方法慢:

  • 每天在 ccduty 上產生 package list (像是 sysutils/screen 這種字串,一行一個),排序後塞入 svn repository。另外將 /usr/local/etc/pkgtools.conf 也塞進去。
  • 要安裝新機器的時候,先將 /usr/local/etc/pkgtools.conf 抓回來,再用 cat ports-list.txt | xargs portinstall 把軟體安裝進去。

也許 ccbsd8 可以試看看這種方式。

FreeBSD Jail 裡面透過 Ports 升級軟體的方法

FreeBSD 6.0 與 jail 這篇裡面我提到了安裝的方法,另外也提到如何跟 host 共用 ports 的方法。但是如果你想要使用 portupgrade 升級軟體,你會發現因為沒有辦法寫入 /usr/ports (要更新 INDEX.db) 而失敗。( 跑來跟我幹剿 XD)

我發現這個問題可以想辦法避開寫入 /usr/ports 就可以了,在 portupgrade 的 manpage 裡面有提到 PORTS_DBDIR 這個變數:

PORTS_DBDIR    Alternative location for the ports database files.
               Default is ``$PORTSDIR''.

於是只要在 /usr/local/etc/pkgtools.conf 裡面設定:

ENV['PORTS_DBDIR'] ||= '/tmp'

指到 /tmp 就可以解決了。

FreeBSD 6.0 與 jail

因為要惡搞一些東西,不方便在現有的系統上跑,於是就跑去弄個 jail 出來用。比起 FreeBSD 4.x 需要自己寫一些 shell script 丟到 /usr/local/etc/rc.d/ 下,6.0 下的 jail 已經整合到系統內了,所以不太需要在自己寫 shell script。

而且 6.x 的 jail 也修掉不少 bug,像是 dmesg 偶而會出不來 (喂喂),reboot 不會理你 (喂喂)... 另外 df 也只會看到 /,不會看到其他的 slice 了。

要生出 jail 的環境,先是:

make buildworld
make installworld DESTDIR=/da1/jail0
make distribution DESTDIR=/da1/jail0

然後改 /da1/jail0/etc/master.passwd,把自己加進去,用 pwd_mkdb -d /da1/jail0/etc /da1/jail0/etc/master.passwd 重新編過一次,記得把家目錄開好 :p

然後是 /etc/rc.conf

ifconfig_fxp1_alias0="inet 192.168.113.10/24"
jail_enable="YES"
jail_list="testbase"
jail_testbase_devfs_enable="YES"
jail_testbase_devfs_ruleset="devfsrules_jail"
jail_testbase_exec="/bin/sh /etc/rc"
jail_testbase_hostname="testbase"
jail_testbase_ip="192.168.113.10"
jail_testbase_rootdir="/da1/jail0"
pf_enable="YES"

接下來弄 pf 的設定,所以去改 /etc/pf.conf

nat on fxp0 from 192.168.113.0/24 to any -> (fxp0)
nat on fxp1 from 192.168.113.0/24 to any -> (fxp0)

接下來把 jail 裡面的東西設一設,像是 resolv.conf

最後用系統給的 jail 就可以啟動了:

/etc/rc.d/jail start

第一次跑起來應該會卡在 ssh 產生金鑰的地方,所以就去喝個飲料之類的 :p (也可以自己先在 host 產生好,不過我這邊懶得講了,請自己去 /etc/rc.d/sshd 翻,需要三組金鑰)

弄完以後就可以 ssh 進去玩了,如果要跟 host 共用 ports directory,可以用 mount_nullfs 以 read-only 掛上來 (security issue),然後修改 /etc/make.conf,把本來會寫入的部分都改到 /tmp 下:

DISTDIR=        /tmp/distfiles
WRKDIRPREFIX=   /tmp/WRKDIR

這樣應該就沒什麼大問題了 :D

Archives