
Ubuntu日本語フォーラム

ログインしていません。
:D :cool: :rolleyes:
この方法に代わる優れた正統的な方法が投稿されました。
Ubuntu on USB HDD : 複数のPCで使う方法 ( 決定版 )
を御覧下さい。
:D :cool: :rolleyes:
.
USB-HDDに「Ubuntu-liveCD」の内容を解凍してインストールし、複数のPCに接続して内蔵HDDにインストールした場合と同じように
起動できる方法 Ubuntu on USB HDD : 複数のPCで使う新しい方法 (1) の「8.04版」です。
( 「7.10版」からは、「ブートCD」のブートローダをgrubにするなどのminor-changesです。)
内蔵HDDにインストールした場合と同様に、kernelのupdateやOSのupgradeが可能ですから、liveCDなどと違って、「真の意味で
OSを携帯できる」 画期的な方法ということができます。
USB機器に対するUbuntuの改良のためか、「Ubuntu 7.10」の時より、OSやapplicationsの安定した動きが認められます。
しかし、「突入電流」(「起動電流」) の問題は存在します。これに関しては下の「『突入電流』に御注意!」を御覧下さい。
また、「Ubuntu on USB HDD」 を直接起動することも、下で作成する 「ブートCD」 で起動することもできます。
「USB-HDDのパーティション分割」 と 「Ubuntuのインストール」 に多少の時間と手間が掛かること以外は極めて簡単です。
≪ USB-HDDのパーティション分割 ≫
1. 全てのUSB-storageデバイス( USB-HDD、USBメモリ 等 ) をPCから外して、「Ubuntu-ja-desktop-CD」でPCを起動する。
2. USB-HDDをPCに接続する。その上の既存パーティションのアイコンがDesktop上に出現したら、右クリックして「アンマウント」する。
3. 端末で次のコマンドのどちらかを実行し、その接続デバイス /dev/sd* を調べる。
( 内蔵HDDが1台なら /dev/sdb、2台なら /dev/sdc となる。)
$ dmesg または $ sudo fdisk /dev/sd*
4. fdisk コマンド ( または GParted ) で、USB-HDD上にパーティションを作成する。 「swapパーティション」は必須である。
パーティション分割の一例を示すが、下の2つのパーティションはUSB-HDDの何番目のパーティションにあってもよく、サイズも自由
である。 また、以下では 「rootパーティション」 の接続デバイスを一般的に /dev/sd*@ と書く。
接続デバイス 名 称 サイズ ファイルシステム
/dev/sd*1 rootパーティション 20Gb ext3
/dev/sd*2 swapパーティション 1Gb swap
≪ Ubuntuのインストール ≫
1. Desktop の「インストール」アイコンをクリックして、内蔵HDDの場合と同様にインストールを開始する。
2. 「ディスクの準備」 の画面で、「手動」 を選択する。
3. 「パーティションの準備中」 の画面で、下方にある 「rootパーティション」 の /dev/sd*@ を選択し、「パーティションの編集」
をクリックする。
4. 「パーティションの編集」 パネルでは (パネルが出るのに30秒以上掛かることがある)、「利用方法」 に 「ext3・・・」 を選択し、
「パーティションの初期化」 にチェックを入れる。「マウントポイント」 で rootの「 / 」を選択。
「swapパーティション」には何もしない。
5. 「インストール準備完了」 画面で、右下の 「拡張...」 をクリックし、「詳細オプション」パネルを出す。
6. 「詳細オプション」パネルの 「ブートローダ」 で (hd0) を次のように書き換えて、「OK」を押す。
USB-HDDの接続デバイス 書き換え後
/dev/sdb ------------> (hd1)
/dev/sdc ------------> (hd2)
7. インストールが完了したら、「ライブCDを使い続ける」 をクリックして 「インストール完了後の処置」 に進む。
≪ インストール完了後の処置 ≫
1. /home/ubuntu に スクリプトファイル boot-hdd.sh を作成し、以下の91行を書き込んで ( コピー&ペースト ) 保存する。
$ gedit boot-hdd.sh
mkdir usb
sudo mount /dev/$1 usb
sudo sync
sudo sed -i -n '1,140p' usb/boot/grub/menu.lst
sudo sed -i -e 's/(hd[0-4],/(hd0,/' -e 's|#color cyan/blue white/blue|color black/cyan blink-red/cyan|' usb/boot/grub/menu.lst
mkdir -p bootcd/boot/grub
cp usb/boot/vmlinuz* usb/boot/initrd*generic bootcd/boot/
cp usb/boot/grub/* /usr/lib/grub/i386-pc/stage2_eltorito bootcd/boot/grub/
sed -i -e 's/hd0,0/cd/' bootcd/boot/grub/menu.lst
sudo genisoimage -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o hdd-boot.iso bootcd
sudo mkdir usb/etc/X11/xorg
sudo chmod -R 777 usb/etc/X11/xorg
touch usb/etc/X11/xorg/uuid
sudo chmod 666 usb/etc/X11/xorg/uuid
echo "#! /bin/sh\n" > h1
cat > h2 <<EOF
sudo cp -f /etc/X11/xorg.conf.pre /etc/X11/xorg.conf
sudo dpkg-reconfigure -phigh xserver-xorg
sudo rm -f /etc/X11/xorg.conf.[0-9]*
sudo sync
sudo gedit /etc/X11/xorg.conf
EOF
cat h1 h2 > xorg-edit.sh
sudo cp -f xorg-edit.sh usb/usr/local/bin/
sudo chmod +x usb/usr/local/bin/xorg-edit.sh
sudo sync
echo "#! /bin/sh\n" > g1
echo 'uid=`sudo vol_id --export /dev/sda1 | grep UUID= | cut -c12-`' > g2
echo 'n=`ls /etc/X11/xorg | grep "xoc" | tail -1 | cut -c5-`' > g3
echo 'num=`expr $n + 1`' > g4
cat > g5 <<EOF
cp /etc/X11/xorg.conf /etc/X11/xorg/xoc-\$num
echo "\$num: \$uid" >> /etc/X11/xorg/uuid
sudo mv -f /etc/X11/xorg.conf /etc/X11/xorg.conf.pre
sudo sync
EOF
cat g1 g2 g3 g4 g5 > xorg-save.sh
sudo cp -f xorg-save.sh usb/usr/local/bin/
sudo chmod +x usb/usr/local/bin/xorg-save.sh
sudo sync
echo '\nuid=`sudo vol_id --export /dev/sda1 | grep UUID= | cut -c12-`' > f1
echo 'count=`grep -c "$uid" /etc/X11/xorg/uuid`' > f2
echo 'if [ $count -gt 0 ] ; then' > f3
echo ' num=`grep "$uid" /etc/X11/xorg/uuid | tail -1 | cut -d":" -f1`' > f4
cat > f5 <<EOF
sudo cp /etc/X11/xorg/xoc-\$num /etc/X11/xorg.conf
sudo sync
sleep 0.2
fi
sudo mv -f /etc/X11/xorg.conf /etc/X11/xorg.conf.pre
EOF
cat f1 f2 f3 f4 f5 > f6
cat usb/etc/init.d/rc.local f6 > f7
sudo cp -f f7 usb/etc/init.d/rc.local
sudo mv -f usb/etc/X11/xorg.conf usb/etc/X11/xorg.conf.pre
sudo sync
fsedit() {
k=1
pp="^# /dev/$1"
nn=`grep -c "$pp" fstab`
while [ $k -le $nn ] ; do
num=`grep -n "$pp" fstab | head -n 1 | cut -d: -f1`
if [ -n $num ] ; then
nun=`expr $num + 1`
sed -i -e "${num}s/.*//" fstab
sed -i -e "${nun}s/.*//" fstab
fi
k=`expr $k + 1`
done
sed -i '/^$/d' fstab
}
sudo cp usb/etc/fstab usb/etc/fstab.bak
cp usb/etc/fstab .
uhd=`echo "$1" | cut -c1-3 `
if [ $uhd = "sdb" ] ; then
fsedit sda
elif [ $uhd = "sdc" ] ; then
fsedit sda
fsedit sdb
fi
sudo cp -f fstab usb/etc/
sudo sync
sudo umount usb
rm -fr f* g* h[1-2] bootcd usb x*
2. スクリプトファイル boot-hdd.sh を実行する。 この時、「 rootパーティション」 の接続デバイスの sd*@
( 例えば、sdc2 など ) を引数として半角空白の後に付け加える。
$ sh ./boot-hdd.sh sd*@
3. /home/ubuntuにできているファイル hdd-boot.iso をCD-R(W)に焼く。
≪ 起動後の処置 ≫
GNOMEによるキーボードの設定を行う。
「システム」--> 「設定」 --> 「キーボード」 --> 「レイアウト」に入り、「キーボードの型式」 で 「日本語 106-key」 を選択。
「レイアウトの選択」 --> 「追加」 --> 「レイアウトの選択」パネル で「レイアウト」の「日本」を選択して 「追加」 を押し 、元の画面に
戻り 「USA」 の行を削除して、「Japan」 の行の 「デフォルト」 にチェックを入れ、閉じる。
最後に、キーボードの一番下の「Alt」キーと「→」キーを同時に押す。
これで、使い慣れた日本語の配列になる。
≪ 「xorg.conf」を編集・保存する方法 ≫
hardware-detectionに関しては、内蔵HDDにインストールした場合と殆ど同じです。
「Ubuntu-liveCD」 の正常起動できる殆どのPCで、自動的に 「Ubuntu on USB HDD」 を正常起動することができます。
各種driversや関連パッケージがインストールされ、適当な設定がなされれば、対応するhardwaresが原則的に自動認識さ
れます。 しかし、「xorg.conf」の編集が必要となる場合があります。
1. 「Low Graphics Mode」で起動し、「Synaptic パッケージ・マネージャ」などでdriversとその関連packages
をインストールし、必要な設定を行う。
2. ファイル/usr/loca/bin/xorg-edit.sh をダブルクリックし、「端末内で実行する」を選択。
ファイルxorg.conf が開かれるので、編集し保存する。
3. 次に、ファイル/usr/local/bin/xorg-save.sh をダブルクリックすると、フォルダ/etc/X11/xorg の中に
xoc-* などのファイル名でxorg.confが保存され、ファイルuuidに「PCの/dev/sda1のUUID」が書き込まれる。
4. 以上で、「Ubuntu on USB HDD」の起動時に、対応するファイルxorg.confが自動的に読み込まれる。
≪ 「突入電流」に御注意! ≫
USB機器には、その起動時に「突入電流」(「起動電流」) と呼ばれる大きな電流が流れます。これは機器の立ち上げ時に、電気で
満たされていないコンデンサーなどに一気に電流が流れ込むためです。
パソコン本体のUSBポートは各ポート毎に500mAの電流を供給可能ですが、USB-HDDの中には最大消費電流がUSB規格の
500mAを超えるものがあります。
USB-HDDをデータstorageとして使用するのであれば、それほど大きな電流にはならないのですが、インストールしたOSの
起動時には、「突入電流」は一時的にせよ大きくなり、定常の2~3倍に達することもあるようです。
従って、「突入電流」が電源やmother-boardsを障害する可能性があり、USB-HDDに「ACアダプタ」で直接電流を供給する
必要があります。
市販の 「USB2.0 TO IDE CABLE」( IDEをUSBに変換するケーブル ) には、5V,12V共に最大2Aの「ACアダプタ」が付属して
いますから、それをお求め下さい。多少持ち運びには不便ですが安心です。
このことは 「C&P Ubuntu on USB HDD」 にも勿論当てはまります。ご注意下さい。
## 「使用経験」や不具合など、是非お知らせ下さい。
最後の編集者: moz (2008-09-17 19:13:46)
オフライン
初めまして
本トピックでUSB HDDにインストールして使用させて頂いております
いたって順調に動作しております
どうもありがとうございます
私でよければ少し状況を報告させて頂きます
今のところ、1点だけ、HDDがSATA(HTS541080G9SA00:80GB)で、DellノートD600で、USBからの給電容量が不足のためか、正常にブート出来ませんでした
これは後日、ACアダプターを使ってもう一度トライしてみる予定です
結果はまた後日、よろしければ報告させて頂きます
※因みに、HP製のデスクトップPC(モデル名後日)では、CDブートすら出来ませんでした
何故だかはわかりません
起動しかけてはまた勝手に再起動を始める、ということを放っとくと無限ループで繰り返します
あと、よろしければ、
> ≪ 「xorg.conf」を編集・保存する方法 ≫
>
> hardware-detectionに関しては、内蔵HDDにインストールした場合と殆ど同じです。
> 「Ubuntu-liveCD」 の正常起動できる殆どのPCで、自動的に 「Ubuntu on USB HDD」 を正常起動することができます。
>
> 各種driversや関連パッケージがインストールされ、適当な設定がなされれば、対応するhardwaresが原則的に自動認識さ
> れます。 しかし、「xorg.conf」の編集が必要となる場合があります。
>
> 1. 「Low Graphics Mode」で起動し、「Synaptic パッケージ・マネージャ」などでdriversとその関連packages
> をインストールし、必要な設定を行う。
>
> 2. ファイル/usr/loca/bin/xorg-edit.sh をダブルクリックし、「端末内で実行する」を選択。
> ファイルxorg.conf が開かれるので、編集し保存する。
>
> 3. 次に、ファイル/usr/local/bin/xorg-save.sh をダブルクリックすると、フォルダ/etc/X11/xorg の中に
> xoc-* などのファイル名でxorg.confが保存され、ファイルuuidに「PCの/dev/sda1のUUID」が書き込まれる。
>
> 4. 以上で、「Ubuntu on USB HDD」の起動時に、対応するファイルxorg.confが自動的に読み込まれる。
の解説について、もう少し詳細な説明を頂けますでしょうか?
よくわからないのは、
→「Low Graphics Mode」で起動し・・・
→ファイルxorg.confが開かれるので、編集し・・・
のあたりです
もしかすると、必ずしも必要ではないのかもしれませんが、差し支えなければよろしくお願い致します
とりあえず以上です
これからもよろしくお願い致します
オフライン
こんばんわ
昨日の続きです
T.O による投稿:
今のところ、1点だけ、HDDがSATA(HTS541080G9SA00:80GB)で、DellノートD600で、USBからの給電容量が不足のためか、正常にブート出来ませんでした
これは後日、ACアダプターを使ってもう一度トライしてみる予定です
結果、やはり正常ブートしませんでした
原因はさっぱりわかりませんが、ひょっとして相性、ってこともあるかもしれません
因みに、HDDケースは、エアリア製のIS250SUというものです
とりあえず、他のコンピュータで使うことにします
T.O による投稿:
※因みに、HP製のデスクトップPC(モデル名後日)では、CDブートすら出来ませんでした
何故だかはわかりません
これはこちらになります:
http://h50146.www5.hp.com/products/desktops/old/dc5750sf_ct/amd_athlon64x2dual_model.html
以上、参考になれば幸いです
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
オフライン
T.Oさん、御返事遅れて済みません。
2台のmachineで起動できないとのことですが、実は小生も正しく対応できるかどうか自信がありません。
というのも、これまで周囲の協力で20台を越えるmachineで試してみましたが、ubuntu-liveCDがすんなり起動できる場合、
殆ど例外なく起動できているためです。 病気を見たこともない医者のようなものです。
思い付くままに対策を書いてみます。
1. ubuntu-liveCDで起動し確認。 (貴方のmachineでは恐らく問題なく起動できるでしょう)
2. grubの選択画面で、boot-optionに 「irqpoll all_generic_ide」 を付けて起動してみる。
3. kiyoshiさんが書かれたような他の boot-options を試してみる。
BootOptions を参考にして下さい。
次に、「『Low Graphics Mode』で起動し・・・・・・」の件ですが、例えば、ubuntu-liveCDが対応していないgraphics-cardsの場合、
起動時に、「Low Graphics Mode」で起動しますか?と問う画面が現れ、 これを選択すると 800x600 などの低解像度で起動
されることになります。 始めから無理にその方法で起動する必要はありません。
「ファイルxorg.confが開かれるので、編集し・・・」は、ファイル/usr/loca/bin/xorg-edit.sh をダブルクリックすると、シェルスクリプト
に書かれたように、geditでファイルxorg.confが開かれるということです。
オフライン
こんばんわ
皆さまご回答ありがとうございます
mozさん による投稿:
2台のmachineで起動できないとのことですが、実は小生も正しく対応できるかどうか自信がありません。
というのも、これまで周囲の協力で20台を越えるmachineで試してみましたが、ubuntu-liveCDがすんなり起動できる場合、
殆ど例外なく起動できているためです。 病気を見たこともない医者のようなものです。
と言うことは、CDで起動出来るかでほぼ全てが決まると言うことでしょうか?
mozさん による投稿:
思い付くままに対策を書いてみます。
1. ubuntu-liveCDで起動し確認。 (貴方のmachineでは恐らく問題なく起動できるでしょう)
2. grubの選択画面で、boot-optionに 「irqpoll all_generic_ide」 を付けて起動してみる。
3. kiyoshiさんが書かれたような他の boot-options を試してみる。
BootOptions を参考にして下さい。
そうですね、時間がある時に試してみます
また、結果は報告させて頂きます
mozさん による投稿:
次に、「『Low Graphics Mode』で起動し・・・・・・」の件ですが、例えば、ubuntu-liveCDが対応していないgraphics-cardsの場合、
起動時に、「Low Graphics Mode」で起動しますか?と問う画面が現れ、 これを選択すると 800x600 などの低解像度で起動
されることになります。 始めから無理にその方法で起動する必要はありません。
「ファイルxorg.confが開かれるので、編集し・・・」は、ファイル/usr/loca/bin/xorg-edit.sh をダブルクリックすると、シェルスクリプト
に書かれたように、geditでファイルxorg.confが開かれるということです。
やはりこれもCDブートの話ですね
そうすると余計気にすることもないのかな、という気になりました
後はもっとシェルスクリプトを勉強する必要を感じました
大変お忙しいところ有難うございました
オフライン
こんばんわ
ちょっと気になったので追記させて頂きます
mozさん による投稿:
2台のmachineで起動できないとのことですが、実は小生も正しく対応できるかどうか自信がありません。
というのも、これまで周囲の協力で20台を越えるmachineで試してみましたが、ubuntu-liveCDがすんなり起動できる場合、
殆ど例外なく起動できているためです。 病気を見たこともない医者のようなものです。
実は、先日報告させて頂いたうち、Dellのノートの方は、CDブートは普通に出来ます
で、別の2.5インチのPATA(富士通製:40GB)でも、正常ブートしました
やはり、kiyoshiさまの仰るとおり、SATAの特性で何かあるのかもしれませんね
(3.5インチの話ですが、一部の機種でスピンアップが遅いものがあると聞いたことがありますが、それは関係ないですかね?)
kiyoshiさん による投稿:
エラーメッセージは表示されていませんか?表示されているなら、それをこちらに記載すれば、返事があるかもしれません。
エラーの出方はまちまちです
grubは正常に立ち上がっても、その後で「Starting up...」の後ぴたりとHDDの動作が止まったり(アクセスしてる様子がないのが見た目と音で判断できた)、grubの起動途中でエラー番号が1だったり2だったり5だったり、ってことを不定期に出してます
なお、HPのデスクトップ機については、まだトライ出来てません
また追って報告させて頂きます
オフライン
kiyoshiさんが度々この方法の限界あるいは危険性について言及しておられますが、小生も出来の悪い息子の欠点を見て見ぬ振り
をしている訳ではありません。
実はこの2・3週間少し突破口らしきものが見えてきたので、御報告させて頂くと同時に、多くの方々のアドバイスを頂戴できればと
考えています。
「 Ubuntu live CD」 では、initrdの中のディレクトリ /scripts/casper-bottom の32のシェルスクリプトが timezone・fstab・
swap・autologin やそして何よりも x-configuration ( xorg.conf の生成 ) に関わっています。
従って、「 ext-Ubuntu on USB HDD 」 の起動時に live CD と同様に /scripts/casper-bottom の中のシェルスクリプトを実行
させることができれば、問題は基本的に解決するのです。
「Casper boot process」 によれば、「 Boot order 」は次の様です。
< Boot order >
● /init
● /scripts/init-premount
● mountroot()
● find_livefs()
● mount mount_images_in_directory()
● setup_unionfs()
● /scripts/casper-bottom
● /scripts/init-bottom
これは、起動時に initrd の中のファイル init に書かれた通りにprocessが進み、rootfsがmountされた後で/scripts/casper-bottom
の中の32のシェルスクリプトが実行されることを示しています。
このprocessは、「kernel command line options」 に 「 boot=casper 」 と書かれた場合に実行されます。
一方、「 root=/dev/sd** 」 や 「 root=UUID=******* 」 のようなoptionは、HDDに live CD の内容を解凍してインスト
ールした場合に対応し、その中のシェルスクリプトが実行されるディレクトリが 「 /scripts/casper-bottom 」 ---->
「 /scripts/local-bottom 」 に変わります。 後者の中にはシェルスクリプト ntfs_3g があるだけです。
勿論、この2つのprocessに関わる複数のディレクトリやファイルはそれぞれで名前も内容も変わっていますが、簡単のために省略
します。
ここで誰でも思い付く 「 無謀な 」 アイディアは 「 local-bottom を casper-bottom で置換すること 」 です。
しかし、ディレクトリ local-bottom に casper-bottom の32のシェルスクリプトを書き込む ( C&P ) 必要は無く、次の3つだけ
で十分です。
10ntfs_3g, 19keyboard, 20xconfig
これらのファイルは当然 casper に関わるものとして書かれていますから、編集する必要があります。
どのように書き直せばよいか目下模索中というところです。
多くのアドバイスをお待ちしています。
( 不確かなことを書いてしまいましたので、後半部分を大幅に書き直しました。 御了承下さい。 )
.
最後の編集者: moz (2008-08-12 20:50:54)
オフライン
追伸;
上の説明#8では余りに不十分ですので、大まかなplanを述べます。
1. 「Ubuntu live CD」 でPCを起動し、USB-HDDにUbuntuをインストールする。 ブートローダgrubをインストールしておく。
2. インストール後そのまま 「Ubuntu live CD」 を使い、ディレクトリmntをホームディレクトリに作成してUSB-HDD上のルート
パーティションをmountし、その中のファイル/boot/initrd.img-****-genericをホームディレクトリにinitrd.imgとして
C&Pする。
3. ディレクトリinitをホームディレクトリに作成して、その中にinitrd.imgを展開する。
4. シェルスクリプトcasperと同様な役割を担うシェルスクリプトlaputaを作成する。
5. laputaは (RAM上の) 適当なディレクトリにUSB-HDD上のルートパーティションをmountする。
grubのmenu.lstのkernel-optionに 「boot=laputa」 を付け加えるのを忘れない。
6. ディレクトリ/script/local-bottomにあるファイル 「ntfs_3g」 の名前を 「01ntfs_3g」 とし、2つのファイル 「02keyboard」
と 「03xconfig」 を付け加える。
7. 「03xconfig」 はmountされたUSB-HDD上のルートパーティションで/usr/sbin/xdebconfiguratorを実行するように書か
れる。 「Ubuntu on USB HDD」 に作成されているディレクトリ /etc/X11/xorg に、接続したPCに対応するファイルxoc-*
があれば、それを xorg.conf として使い xdebconfiguratorの実行をskipするようにも書かれる。
インストール時、「Ubuntu on USB HDD」 にはpackage 「xdebconfigurator」 はインストールされていないので、初回
起動時にインストールする。
8. 他の複数のファイルとの調整を行う。
9. ディレクトリinitの内容をinitrd.gzとして圧縮し、「 Ubuntu on USB HDD」のディレクトリ/bootにC&Pする。
これに対応してgrubのmenu.lstを適当に編集する。
10. 以上の作業は全て1つのシェルスクリプトに纏められるので手間は掛からない。
しかし、シェルスクリプトlaputaや03xconfigを正確に書くことと、8.の調整は小生の力量を越えているかもしれません。
上手く行きますかどうか。
.
最後の編集者: moz (2008-08-21 08:35:06)
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
最後の編集者: kiyoshi (2008-08-18 07:31:44)
オフライン
お盆休暇の最中に多くの方々に閲覧頂き御礼申し上げます。
上の方法は大筋で間違いなく、目標に近いものができましたので中間報告させて頂きます。
まず、initrdの中のシェルスクリプト/script/localの中のシェル関数 mountroot() { の76行目で、次の様に
USB-HDDのルートパーティションがディレクトリ/rootにマウントされますので、ファイルlaputaは必要ありません。
mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
しかし、defaultでは ${roflag}=-r であり、readonlyでマウントされてしまいますので、
sed -i 's|mount \${roflag}|mount -w|' /script/local
のようなコマンドを実行してwritableにする必要があります。
他には、ディレクトリ/script/local-bottomに2つのファイル、keyboard と xconfig、を付け加えれば良いのですが、
keyboardの設定はdexconfで新たに作成されたxorg.confを直接編集することにし、ファイルxconfigに組み込みます。
元から在るファイル「ntfs_3g」の名前を「01ntfs_3g」に変え、ファイル「xconfig」を「02xconfig」とします。
シェルスクリプト「02xconfig」の内容を次に示します。
#!/bin/sh
case $1 in
prereqs)
exit 0
;;
esac
str=`chroot /root /usr/bin/lshw -C system ( ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ )`
count=`chroot /root /bin/grep -c "$str" /etc/X11/xorg/uuid`
if [ $count -gt 0 ] ; then
num=`chroot /root /bin/grep "$str" /etc/X11/xorg/uuid | chroot /root /usr/bin/tail -1 | chroot /root /usr/bin/cut -d":" -f1`
chroot /root /bin/cp -f /etc/X11/xorg/xoc-$num /etc/X11/xorg.conf
else [ -x /root/usr/sbin/xdebconfigurator -a -x /root/usr/bin/dexconf ]
chroot /root /usr/sbin/xdebconfigurator
chroot /root /usr/bin/dexconf
fi
chroot /root sed -i -e 's/pc105/jp106/' -e 's/"us"/"jp"\n\tOption\t\t"XkbOptions"\t"lv3:ralt_switch"/' /etc/X11/xorg.conf
exit
exit 0
「Ubuntu on USB HDD」 に作成されているディレクトリ /etc/X11/xorg に、接続したPCに対応するファイルxoc-*
があれば、それを xorg.conf として使って xdebconfiguratorの実行をskipするが、無ければxdebconfiguratorと
dexconfを連続実行し、新たにxorg.confを作成・上書きします。
最下部のコマンドsedの行は出来上がったxorg.confのkeyboard設定の部分を日本語対応にするものです。
順序が逆になりましたが、「str=`chroot /root ・・・・」 の行では、USB-HDDを接続したPCのUUIDを取得します。
( 後のクイズのために、一部を伏せてあります。)
上の「#1」では、接続PCの認識にその最初のパーティション/dev/sda1のUUIDを使いましたが、initrdによる起動過程
では、/dev/sda1はまだマウントされておらず、「 vol_id --export /dev/sda1 」 や 「 ls -l /dev/disk/by-uuid 」 の
ようなコマンドは使えません。
* *
USB-HDDルートパーティションをwritableでマウントし、たった1つの短いシェルスクリプトを書くだけで、目標の殆どは
達成されます。
しかし、世の中そう甘くはありません。
「live CD」のinitrd.gzを解凍・展開してシェルスクリプトscript/casper-bottom/20xconfigを見ると、次のような
箇所があります。
・・・・・・・・・・・・・・・・・・・・・・・
if [ -n "${XDEBCONF}" -a -x /root/usr/sbin/xdebconfigurator ]; then
# xdebconfigurator
chroot /root /usr/sbin/xdebconfigurator
fi
・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・
casper-reconfigure /root xserver-xorg
・・・・・・・・・・・・・・・・・・・・・・・
上の4行はxdebconfiguratorを実行することですが、live-CDには package 「xdebconfigurator」 がインストールされて
いないのです。
これは次かそのまた次のversionのための準備で、Ubuntuには時々見られる現象です。
xdebconfiguratorとそれに関連したhardware-detectionのためのpackages ( 以下HWDPと略記 ) の性能が向上した
段階で目出度く正式採用されるという訳です。
ですからこの4行は意味を持たず、シェルスクリプト/bin/casper-reconfigureが実行される下の1行が本物と考えられます。
名前からコマンド「sudo dpkg-reconfigure -phigh xserver-xorg」と似ていますから働きの意味は容易に推測できます。
xdebconfiguratorとそれに関連したHWDPの性能はまだまだという印象です。
xdebconfiguratorを 「Synaptic パッケージ・マネージャ」 でインストールすると、HWDPであるdiscover・discover-data・
hwinfoとそのlibrary-packagesが同時にインストールされますが、discoverは開発途上であり、kudzuの方がまだ性能が
良いようですがUbuntuでは使えません。 追加でやはりHWDPであるxresprobeをインストールしてみましたが、余り芳しく
ありません。
勿論、5・6台程度のPCに接続して使用するにはxorg.confを編集・保存しても、それ程手間も掛かりませんからこのままでも
使えるのですが。
と言うわけで、目下シェルスクリプト/usr/sbin/xdebconfiguratorを編集するかどうか思案投げ首です。
* *
<< クイズの時間 >>
お盆休暇による疲れと暑さを吹き飛ばすクイズです。 10分で解ければ有段者。 :rolleyes: :D :cool:
問題
1行の文字数が200、100行のファイルkikiがあり、次のように半角空白の海の中に小さな文字列がランダムに並んでいると
します。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
width: 32 bits clock: 33MHz capabilities: msi pm vga_controller bus_master
cap_list configuration: latency=0 *-display:1 UNCLAIMED
description: Display controller
product: Mobile 945GM/GMS/GME, 943/940GML Express Integrated
Graphics Controller vendor: Intel Corporation
width: 32 bits
physical id: 2.1 bus info: pci@0000:00:02.1 version: 03
・・・・・・・・・・・・・・・・・・・・・・・・・・・・
kikiのどこかにお馴染みの文字列 「 uuid=**************** 」 が一つだけ入っているとして、半角文字70字
以内の1行コマンドで 「端末」 に 「 ****************」 を表示して下さい。
勿論、この文字列は他の文字列と連結しておらず、行頭または行末にあることもありますが、2行に跨がることはないものと
します。 また、uuid で始まる文字列は他にはないものとします。
多くの斬新で優れた御解答をお待ちしています。
.
最後の編集者: moz (2008-08-21 14:32:01)
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
最後の編集者: kiyoshi (2008-08-19 06:59:39)
オフライン
kiyoshiさん、早速の御解答有難うございました。
しかし、残念ながら正解はありません。
1).
$ grep uuid= kiki|cut -d"=" -f2|cut -d" " -f1
では、uuid= を含む行で uuid=**************** の前に=を含む文字列があれば、誤りとなります。
例えば、次のような行だったら何が表示されますか?
width: 32 bits latency==0 vendor: Intel uuid=****************
2). sedで=を改行に変える方法は、いずれもuuidを含む行の行番号を取り出してその1行下の行を抜き出すので、
大分モタモタしますね。多分70文字には納まらないでしょう。
.
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
最後の編集者: kiyoshi (2008-08-19 12:58:05)
オフライン
hiho
tr ' ' '\n' < kiki | awk '/uuid=/ {sub(/'uuid=/', /'/'); print}'別にsedでuuidを消してもいいんだけどね。私はawk使いだから。=D
オフライン
tr ' ' '\n' < kiki | grep 'uuid=' | tr -d 'uuid='
こっちの方が短いですね。
ああああ、すいません。斬新でなくて。しからないでね。
オフライン
awk 'BEGIN{RS="\n| "} /uuid=/{sub(/'uuid=/',/'/'); print}' < kikiawk使いとしては、awkだけのバージョンを作っておかんと。やっぱり。
最後の編集者: HiroKws (2008-08-19 20:58:11)
オフライン
:D :o おめでとうどざいます!! HiroKwsさん、正解です !! :o:D
正解を導くカギは全ての半角空白を改行で置換することです。 こうすると、空白の多いファイルでは空行が数万にも達するでしょうが
、uuid=**************** だけの行ができます。 後はgrepでその行を抜き出せばよいのです。
kiyoshiさんはそのことに気付いてはおられたようなので、80点とさせて頂きます。
関心を持って閲覧して下さった多くの方々に御礼申し上げます。
* *
これから 嬉しい重大発表です!!
約1年間追求してきた方法が完成しました。
上の 「#11」 で指摘しましたように、ubuntu-liveCDではhardwareの認識に 「 xdebconfigurator 」 を使わずに 「 debconf 」
のcasper用コマンド 「 casper-reconfigure 」 を使っています。
initrdの中のシェルスクリプト/bin/casper-reconfigureを良く見ると、それは コマンド
dpkg-reconfigure -fnoninteractive --no-reload xserver-xorg
を実行することに他なりません。
従って、 「#11」 で示したシェルスクリプト 「 02xconfig 」 の内容を次の様に一部書き換えることで、live-CD と全く同じように起動
できることが分かりました。
#!/bin/sh
case $1 in
prereqs)
exit 0
;;
esac
str=`chroot /root /usr/bin/lshw -C system | chroot /root /usr/bin/tr ' ' '\n' | chroot /root /usr/bin/grep 'uuid=' | chroot /root /usr/bin/cut -c 6-`
count=`chroot /root /usr/bin/grep -c "$str" /etc/X11/xorg/uuid`
if [ $count -gt 0 ]; then
num=`chroot /root /usr/bin/grep "$str" /etc/X11/xorg/uuid | chroot /root /usr/bin/tail -1 | chroot /root /usr/bin/cut -d":" -f1`
chroot /root /bin/cp -f /etc/X11/xorg/xoc-$num /etc/X11/xorg.conf
else [ -x /root/usr/sbin/dpkg-reconfigure ]
chroot /root /usr/sbin/dpkg-reconfigure -fnoninteractive --no-reload xserver-xorg
fi
chroot /root sed -i -e 's/pc105/jp106/' -e 's/"us"/"jp"\n\tOption\t\t"XkbOptions"\t"lv3:ralt_switch"/' /etc/X11/xorg.conf
exit
exit 0
実際、手元の3台のPCで実験してみたところ、何の問題もなく正常起動し、新たなファイル /etc/X11/xorg.conf が作成され
前回起動時の xorg.conf がバックアップファイル xorg.conf.******** として生成されます。
近日中にこの方法の決定版を提出させていただきます。
live-CD 以上の機能を求めれば改良になおしばらく時間が掛かりますが、live-CD 並の起動が実現できたことで一段落です。
「#1」 のような全くインチキな方法の 「 人柱 」 となって下さった方々、kiyoshiさん始め真摯に議論して下さった方々、そして
関心を持って閲覧して下さった数千人の方々にお詫び申し上げると同時に、深く感謝申し上げます。
本当に有難うございました。
.
最後の編集者: moz (2008-08-21 18:20:09)
オフライン
※規約違反により追放されたユーザの投稿は、ログインユーザにのみ表示されます。
最後の編集者: kiyoshi (2008-08-19 22:11:10)
オフライン
通常の(解凍?)インストールを行った場合には、 /scripts/casper-bottom の代わりに /scripts/local-bottom が使われる
のです。 init-premount ----> local-bottom ----> init-bottom の順で読み込まれていくはずです。
* *
「 #11 」 以来USB-HDDを接続するPCを認識するのに、PCのUUIDをlshwのデータから抜くようにしていますが、中にはUUID
の表示されないPCもあるので、コマンド
/usr/bin/lshw -C system > pcid
でファイル pcid を作成・保存して、それをPCの認識資料とすることを考えています。
PCのpcidは 「 pcid-* 」 とし、対応する xorg.conf を 「 xoc-* 」 として、同じ番号*で一緒にフォルダ /etc/X11/xorg に
保存しておきます。
例えば、シェルスクリプト 「 02xconfig 」 の関連部分を次のようにすれば良いでしょう。
chroot /root /usr/bin/lshw -C system > /root/etc/X11/xorg/pcid
num=0
for file in `chroot /root /bin/ls /etc/X11/xorg | chroot /root /bin/grep pcid-`; do
dpc=`chroot /root /usr/bin/diff -q /etc/X11/xorg/$file /etc/X11/xorg/pcid`
if [ -z "$dpc" ]; then
num=`echo "$file" | cut -c 6-`
fi
done
if [ $num -gt 0 ]; then
chroot /root /bin/cp -f /etc/X11/xorg/xoc-$num /etc/X11/xorg.conf
else [ -x /root/usr/sbin/dpkg-reconfigure ]
chroot /root /usr/sbin/dpkg-reconfigure -fnoninteractive --no-reload xserver-xorg
fi
.
最後の編集者: moz (2008-08-21 13:22:48)
オフライン
<< クイズの時間 : その2 >>
私はウッカリしていましたが、上の << クイズの時間 >> のHiroKwsさんの御解答の内、
tr ' ' '\n' < kiki | grep 'uuid=' | tr -d 'uuid='
は誤りです。
その理由をお答え下さい。 1時間で分かれば有段者!! :( :lol: :rolleyes:
意外に難しいですよ!!??
.
最後の編集者: moz (2008-08-21 18:50:27)
オフライン
あああああああ、しまった。
名前を書き忘れた...
:lol:
オフライン
HiroKwsさん。 もっとはっきりした文法上の誤りです。
多くの方は恐らくこのことを御存知ないのでは。
「unix tr コマンド」 ・ 「 Linux tr コマンド 」 によるweb検索では、これに関する日本語の記事を見たことがありません。
.
オフライン
ああ、なんだろう...
「神様、お願い。ヒントをください...」
すると神様は答えられました。
「木と森は違うもの。花びらと花は違うもの。糸と布は違うもの。文字と文章は違うもの。」
「ああ、ますますわからんようになってしまいました。もう一つヒントをください」
「そのものにd含まれれば、紐(band)は禁止(ban)され、陸地(land)にLANが行き渡り、板(board)は雄ブタ(boar)に変わるだろう。」
ああ、なんのこっちゃ。
オフライン
HiroKwsさんへのヒント:
ああ!! 何という偶然でしょう!!
あなたの今書かれた下から2番目の文章に手掛かりがありますよ!?
.
オフライン