トップ «前の日記(2007-12-12(Wed)) 最新 次の日記(2007-12-15(Sat))» 編集

ぽっぺん日記@karashi.org


2007-12-14(Fri) [長年日記]

_ USBメモリ起動のFreeBSDを作ってみた

会社のBフレッツに繋っているFreeBSDルータを近々リプレイスすることになったので、予行練習。

今はCF-IDE変換基盤をかませてCFから起動させていたんだけど、お手軽にUSBメモリから起動したいなと思ったので、Installing FreeBSD on a USB stick, episode IIを参考に作業をしてみた。 手順も簡単なので、特に引っ掛かることなく完了。

ただ、上記サイトのやり方だと、/homeがUSBメモリ上にあるので、/homeでばんばん作業をする必要がある時には、メディアの寿命が心配ということで、/homeもMFSにすることにした。

以下は作業内容。すべてUSBにインストールしたFreeBSDに対して行なう。

  1. /etc/fstabに下記の内容を追記する。
    • md /home mfs rw,-s16M,nosuid,noatime 0 0
  2. populate-home(この日記の最後に内容は書いた)をインストールする。
    • cp populate-home /usr/local/etc/rc.d
    • chmod 0555 /usr/local/etc/rc.d/populate-home
  3. /etc/rc.confに、下記の内容を追記する。
    • populate_home_enable="YES"
  4. 起動時にhomeディレクトリにコピーされるファイルを準備する。
    • mkdir -p /etc/home/ユーザ名
    • homeディレクトリに置くファイル群(dotファイルとか)をレポジトリからcheckoutするなり、コピーするなりして、手元に用意する。
    • cp 上記のファイル /etc/home/ユーザ名
    • chown -R ユーザ名 /etc/home/ユーザ名

populate-homeスクリプトの内容は下記の通り。

#!/bin/sh

# PROVIDE: populate_home
# REQUIRE: mountcritremote
# BEFORE:  DAEMON

. /etc/rc.subr

populate_home_enable=${populate_home_enable-"NO"}
populate_home_data=${populate_home_data-"/etc/home"}

name="populate_home"
rcvar=`set_rcvar`

stop_cmd=":"
start_cmd="populate_home_start"

populate_home_start()
{
	if [ -d ${populate_home_data} ]; then
		cd ${populate_home_data}
		/usr/bin/find . -print | /usr/bin/cpio -dump --quiet /home
	fi
	echo '.'
}

load_rc_config "$name"
run_rc_command "$1"

上記の作業で、MFSの/home(容量は16MB)が起動時にmountされ、/etc/homeの内容が/homeにコピーされる。

populate-homeのPROVIDEやREQUIRE、BEFOREあたりはちと自信がないんだけど、とりあえず、手元の環境では動いている。

CFの代わりにUSBメモリを使うメリット・デメリット

メリットはこんな感じか。

  • CF-IDE変換基盤が必要ない。
  • たぶん、相性などで起動できないUSBメモリはない(CFはTrueIDEモードに対応していることが必要)。
  • FreeBSDとUSBさえあれば中身の変更が可能(CFはCFスロットなり、リーダーなりが必要)。
  • メガバイトあたりの単価がCFよりUSBメモリの方が安い(たぶん)。

一方、デメリット。

  • 最近(3年前以降くらい?)のPCでないと、USBメモリから起動できない。*1
  • 延長ケーブルを付けないと出っ張るので、スペース的な問題があるかも。

追記:MFSなのにnoatimeを指定する必要ってあるんだろうか

元ネタ・サイトがそうなっているので、そのままマネしたけど、ちと疑問に思った。

参考

*1 まぁ、CFの場合も普通はCF-IDE変換基盤がないと起動しないので、デメリットとは言えないかも。

_ 日記をAutoPagerize対応にした

やろうやろうと思いつつ放置モードだったのだが、tDiaryをHEADにアップデートしたので、ついでにAutoPagerize対応にしてみた。

と言いつつ、実はkdmsnrさんとこの丸パクリだったり。

plugin/00default.rbだけ、ちょっと変更して、こんな感じにしてみた。

--- plugin/00default.rb.orig   Fri Dec 14 18:33:14 2007
+++ plugin/00default.rb        Fri Dec 14 18:41:11 2007
@@ -17,7 +17,7 @@
 end

 def navi_item( link, label, rel = false )
-      %Q[<span class="adminmenu"><a href="#{link}"#{rel ? " rel=\"nofollow\"" : ''}>#{label}</a></span>\n]
+      %Q[<span class="adminmenu"><a href="#{link}"#{rel ? " rel=\"#{rel}\"" : ''}>#{label}</a></span>\n]
 end

 def navi_user
@@ -48,7 +48,7 @@

 def navi_user_latest
       result = ''
-      result << navi_item( "#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "&laquo;#{navi_prev_ndays}" ) if @conf['ndays.prev'] and not bot?
+      result << navi_item( "#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "&laquo;#{navi_prev_ndays}", "next" ) if @conf['ndays.prev'] and not bot?
       result << navi_item( h(@index), h(navi_latest) ) if @cgi.params['date'][0]
       result << navi_item( "#{h @index}#{anchor( @conf['ndays.next'] + '-' + @conf.latest_limit.to_s )}", "#{navi_next_ndays}&raquo;" ) if @conf['ndays.next'] and not bot?
       result

や、navi_itemの第三引数を変えただけだけど。ただ、これだと、navi_itemの第三引数をtrueにしている時には、ちとまずいかも。

00default.rbを書き直した

軽くgrepしてみたら(先にしろよ)第三引数でtrueを使っているところが多いみたいなので、第三引数をtrueにしていたら、問答無用にrel="next"にするようにした。

--- plugin/00default.rb.orig   Fri Dec 14 18:33:14 2007
+++ plugin/00default.rb        Fri Dec 14 18:52:00 2007
@@ -17,7 +17,7 @@
 end

 def navi_item( link, label, rel = false )
-      %Q[<span class="adminmenu"><a href="#{link}"#{rel ? " rel=\"nofollow\"" : ''}>#{label}</a></span>\n]
+      %Q[<span class="adminmenu"><a href="#{link}"#{rel ? " rel=\"next\"" : ''}>#{label}</a></span>\n]
 end

 def navi_user
@@ -48,7 +48,7 @@

 def navi_user_latest
       result = ''
-      result << navi_item( "#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "&laquo;#{navi_prev_ndays}" ) if @conf['ndays.prev'] and not bot?
+      result << navi_item( "#{h @index}#{anchor( @conf['ndays.prev'] + '-' + @conf.latest_limit.to_s )}", "&laquo;#{navi_prev_ndays}", true ) if @conf['ndays.prev'] and not bot?
       result << navi_item( h(@index), h(navi_latest) ) if @cgi.params['date'][0]
       result << navi_item( "#{h @index}#{anchor( @conf['ndays.next'] + '-' + @conf.latest_limit.to_s )}", "#{navi_next_ndays}&raquo;" ) if @conf['ndays.next'] and not bot?
       result

参考

[]
本日のPingbacks(全0件)

トップ «前の日記(2007-12-12(Wed)) 最新 次の日記(2007-12-15(Sat))» 編集