yuu_nkjm blog
2011-12-01(Thu) [長年日記] 編集
[Apache][git][openSUSE] Git over http (cloneはできたがpushできず)
WebDAVの設定
Gitリポジトリの作成
GitリポジトリをWebDAV(+https)経由で公開する - yamkazu-techの日記を参考にレポジトリを作る.
cd /git/nkjm /git/repos/nkjm mkdir projects.git cd projects.git git --bare init Initialized empty Git repository in /git/repos/nkjm vi description echo "http://hoge.nkjm.info/git/nkjm/projects.git" > cloneurl printf "[gitweb]\n\towner = yuu_nkjm\n" >> config
HTTPからgitするための設定.
cp -a hooks/post-update.sample hooks/post-update chmod +x hooks/post-update git update-server-info chown -R wwwrun:www /git/repos/nkjm/projects.git
ここで,"git update-server-info"が重要.Git のリモートリポジトリから HTTP で pull するためのメモ - akihiko’s tech note
Git over httpの設定
# lv /etc/httpd/conf.d/gitweb.conf Alias /git/nkjm /git/repos/nkjm <Location "/git/nkjm"> Options Indexes DAV on AuthType Digest AuthName "xxxxxxx" AuthUserFile /hogehoge/.htdigest <Limitexcept GET HEAD PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>
動作確認
git pull http://hoge.nkjm.info/git/nkjm/projects.git/ master
pullはうまくいった.
しかし,pushしようとすると以下のエラー…
git.exe push --progress "origin" master:master error: Cannot access URL http://hoge.nkjm.info/git/nkjm/projects.git/, return code 22 fatal: git-http-push failed
関連しそうな情報(githubにpushしようとしたらreturn code 22とか言われた - marblejenkaの日記)もあったけど,解決せず.
自前でGitを運用する気はいまのとこないし,HTTP経由で書き込ませたいこともどれだけあるか分からないし,今回は諦める.WebDavは便利なんだけど,昔からイジメられている気がする.
2011-12-02(Fri) [長年日記] 編集
[Apache][openSUSE] "client denied by server configuration"エラーとAllow from all
client denied by server configuration
というエラーが出る時は,当該ディレクトリに以下の様な許可が与えられているか確認する.
Order allow,deny Allow from all
openSUSEには,デフォルトで以下の設定がされているので,注意する.
# /etc/apache2/httpd.conf # forbid access to the entire filesystem by default <Directory /> Options None AllowOverride None Order deny,allow Deny from all </Directory>
2011-12-03(Sat) [長年日記] 編集
[FTP][openSUSE] コマンドラインからFTPSでFTPサーバ上のデータを取得
対話型だと自動処理に不向きなので,コマンドラインでFTPサーバからデータを取得したい.さくらインターネットでftpsが使える様になったということなので,ftpsによる接続を試みた.ncftpではftpsを扱えない様なので,FTPクライアントをlftpに代えた.
「Explicitモード(?)」の節が,うまくいったコマンドについて書いた部分である.
Implicitモード(?)
lftp -u user,passwd -e "mirror --only-newer --verbose /home/hoge/ /srv/www/repos/hoge" ftps://hoge.sakura.ne.jp:21
sakuraサーバはFTPSに990番ポートでなく21番ポートを使う様なので,ポート番号を指定する.
lftp -u hoge -e "debug 12" ftps://hoge.sakura.ne.jp:21 lftp hoge@hoge.sakura.ne.jp:~> ls ---- dns cache hit ---- hoge.sakura.ne.jp (xxx.xx.xx.xxx) ポート 21 に接続中 `ls' (現在 0 バイト) [FEAT negotiation...] **** gnutls_handshake: A TLS packet with unexpected length was received. ---- コントロールソケットを閉じています ls: 致命的エラー: gnutls_handshake: A TLS packet with unexpected length was received.
上記の様なエラーが出て接続出来なかった.何でだろ….何かExplicitとImplicitとかいってた辺りが怪しい気がする.ひとまずwikipediaでも見てみる.
暗号化の種類
FTPSには、認証コマンド(AUTHコマンド)実行後に暗号化通信を開始するExplicitモードと、FTPSサーバ接続開始時点から暗号化通信を開始するImplicitモードの2種類が存在する。
Explicitモード
サーバに接続した後にクライアントがAUTHコマンドを実行して、使用するプロトコル(SSLまたはTLS)のネゴシエーションをおこない、適合したプロトコルでのハンドシェイク完了後に暗号化された通信がおこなわれる。 つまりExplicitモードの場合、クライアントがAUTHコマンドを実行しなければ通常のFTPとして機能する。
Implicitモード
サーバに接続した直後にSSLまたはTLSによるハンドシェイクがおこなわれる。 Implicitモードで動作するサーバに接続する場合、クライアントはサーバが採用している暗号化プロトコルに適合したFTPSクライアントソフトを使用する必要がある。 また、データ転送チャネル(PORTまたはPASVコマンドで作成されるチャネル)での通信を暗号化する場合、PROTコマンドを用いて保護レベルをP (Private) に設定する必要がある。
さくらインターネットの説明サイトにExplicitモードで接続する様に書いてあった.上記の蹴られ方を見ると,さっきはImplicitモードで接続しようとしていることになるのかな.「Explicitモードの場合、クライアントがAUTHコマンドを実行しなければ通常のFTPとして機能する」って書いてあるから,いきなりftpsを指定するのはこの説明に合わない気がする.語感としては,ftpsって指定する方がEplicitに思えるけど….
Explicitモード(?)
ユーザ毎の設定は~/.lftprcに,サーバ全体のlftpの設定は/etc/lftp.confに書く.
# ~/.lftprc set ftp:ssl-auth TLS set ftp:ssl-force true set ftp:ssl-allow yes set ftp:ssl-protect-list yes set ftp:ssl-protect-data yes set ftp:ssl-protect-fxp yes # set ssl:verify-certificate no サーバによってはこれが必要になるケースもある?
~/.lftprcに上記の様に記述し,以下のコマンドを実行した.先ほどと違うのは,ftpsではなくftpを指定した点である.
lftp -u hoge -e "debug 12" ftp://hoge.sakura.ne.jp lftp hoge@hoge.sakura.ne.jp:~> ls (snip) ---- hoge.sakura.ne.jp (xxx.xx.xx.xxx) ポート 21 に接続中 <--- 220 ProFTPD 1.3.3c Server (SAKURA Internet FTP Server) [xxx.xx.xx.xxx] ---> FEAT (snip) ---> AUTH TLS <--- 234 AUTH TLS successful (snip)
"AUTH TLS successful"と出てるし,FTP over SSL/TLSが出来ていることが分かる.
ミラーリング用のスクリプト
# hoge-bkup.conf set ftp:ssl-auth TLS set ftp:ssl-force true set ftp:ssl-allow yes set ftp:ssl-protect-list yes set ftp:ssl-protect-data yes set ftp:ssl-protect-fxp yes # set ssl:verify-certificate no サーバによってはこれが必要になるケースもあるようだ. # 接続先のポート番号はftp://xxxxの後ろに:ポート番号で指定する. open -u hoge,passwd ftp://hoge.sakura.ne.jp debug 12 -o /tmp/lftp_hoge_bkup.log mirror --only-newer --verbose /home/hoge /srv/www/hoge
上記の様なスクリプトを作成し,lftpの-fオプションで渡して実行するようにした.パスワードを書き込むときは,そのファイルのアクセス権限に十分に注意する.
lftpのオプションは以下.-fと他のオプションの併用は出来ないようだ.
lftp -help 使い方: lftp [OPTS]`lftp' は rc ファイルを読み込んだあと最初に実行されるコマンドです -f ファイルで指定されたコマンドを実行し終了する -c コマンドを実行して終了する --help このヘルプを表示して終了する --version lftp のバージョンを表示して終了する 他のオプションは `open' コマンドのものと同じです -e 選択のすぐあとに指定のコマンドを実行する -u [, ] 認証で指定のユーザ/パスワードを使う -p 接続に指定のポートを使う ホスト名、URL あるいはブックマーク名
備考
残った疑問
lftp -v Libraries used: Readline 6.1
lftpのバージョン情報を表示させるとこんな感じ.ここでOpenSSLモジュールが組み込まれていると表示されないとFTPSが使えないと書いてある記事を見かけたのだが,どうなんだろう.
ncftp (ncftpget)
昔はncftpを使っていた.
ncftpget -u user -p 'passwd' -d /home/hoge/tmp/ncftp_hoge_bkup.log -T -R hoge.sakura.ne.jp /srv/www/repos/hoge /home/hoge
2011-12-04(Sun) [長年日記] 編集
[KVM][openSUSE] KVM仮想マシンの名前変更と移動
KVM仮想マシンの整理で,(1)KVM仮想マシンの名前を変える,(2)KVM仮想マシンのコピーを取って名前を変えてそれを同一KVMホストで動かす,(3)KVM仮想マシンのコピーを他のKVMホストで動かす,という三つの作業を行ったので,その作業ログを残す.
KVM仮想マシンの名前の変更
virsh editを使う方法と設定ファイルをエディタで直接編集する方法がある.
なお,実行されているKVM仮想マシンの設定を確認するには,dumpxmlを使う.
virsh dumpxml kvm-guest-00
virsh editを使う
"virsh edit 仮想マシン名」でKVM仮想マシンの設定を編集できる.こちらが本道か.
virsh edit kvm-guest-00
設定ファイルをエディタで直接編集
KVM仮想マシン(kvm-guest-00.xml)の設定ファイルを変更した場合,その内容をKVM仮想マシンに反映させるためには,以下を行う.
virsh define /etc/libvirt/qemu/kvm-guest-00.xml
KVM仮想マシンをコピーし,同一KVMホストマシン上で動かす場合
/etc/libvirt/qemu/kvm-guest-00.xml を開いて,nameとuuidを変更する.nameは設定xmlのファイル名(拡張子より前の部分)と一致させる.
<domain type='kvm'> <name>kvm-guest-00</name> <uuid>********-****-****-****-************</uuid> </domain>
また,uuidgenコマンドでuuidを得る.
uuidgen
manには「uuidgenは-tオプション,-rオプションを持っているけど,何も指定しなくてもよろしくやっとくよ」と書いてあるようなので,無指定で実行した.
virsh define /etc/libvirt/qemu/kvm-guest-01.xml
KVM仮想マシンを異なるKVMホストマシンへ移動する場合
KVM仮想マシンkvm-guest-00の設定ファイル(/etc/libvirt/qemu/kvm-guest-00.xml)と設定ファイル内で読み込んでいるディスクイメージ(/var/lib/kvm/images/以下あたりにある)を,移動先にコピーする.
移動先でKVMを実行する準備をしたあと,下記のコマンドを実行すると,移動先のKVMホストにKVM仮想マシンが作成される.
virsh define /etc/libvirt/qemu/kvm-guest-00.xml
このあとはvirshコマンド(virsh startとか)で戦ってもいいし,virt-managerから制御してもよい.
参考ページ
- lost and found ( for me ? ): KVM: virsh define と virsh edit
「KVMのイメージの保存場所を変更したいので、イメージを mv で移動、vi で xml ファイルを編集、VMを起動したら、昔の保存場所のままで、新しいの保存場所に反映されなかった。」ときの例が詳しく説明されている. - virshの使い方 - 理想未来はどうなった?
virshの簡単な説明. - KVMゲストOSの他サーバーへの移行 - 銀の鍵 (The Silver Key)
KVM仮想マシンを他のKVMホストに移行する場合. - tenten909 : KVM マシン名変更
KVM仮想マシン名を変更する場合.
2011-12-05(Mon) [長年日記] 編集
[misc][Links] フリーソフトや興味のある技術の記事など
-
画面動画キャプチャーソフト CamStudio 日本語版 | twk @ ふらっと
後輩が使っていてなかなか良いと言っていた.これまでは劇場版 ディスプレイキャプチャー あれ - k本的に無料ソフト・フリーソフトとかWink - k本的に無料ソフト・フリーソフトとかを使っていたが,乗り換えも考えてみるか.
2011-12-06(Tue) [長年日記] 編集
[Linux][Postfix][bind][Troubleshooting] サービス(postfixやbindなど)の待ち受け状況をnetstatで確認する
postfixをインストールして,main.cfのmynetworksも設定したのに,メールが送れなかった.まず,25番ポートの待ち受け状態を見てみる.
[root@localhost /etc]$ netstat -anp|grep 25 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 28482/master
ローカルループバックアドレス(127.0.0.1)のみで待ち受けており,外部ネットワークと接続しているネットワークインタフェースにおいて,postfixが待ち受けていないことがわかる.
そこで,main.cfのinet_interfacesでallを設定すると,全てのネットワークインタフェースにおいてpostfixが待ち受けるようになる.0.0.0.0はallのことらしい.
[root@localhost /etc]$ netstat -anp|grep 25 tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 29966/master
次はbindの例.以下の例では,外部ネットワークと接続しているネットワークインタフェース(10.20.30.40)の53番ポートでも待ち受けていることが分かる.(ローカルネットワークでの運用なので,53番固定で運用している)
[root@localhost /etc]$ netstat -an|grep 53 tcp 0 0 10.20.30.40:53 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN udp 0 0 10.20.30.40:53 0.0.0.0:* udp 0 0 127.0.0.1:53 0.0.0.0:*
関連ページ
2011-12-07(Wed) [長年日記] 編集
[openSUSE][Apache][Tomcat] ApacheとTomacatの連携(jk版)
注記
jkをいれたけど,mod_proxy_ajpの方が良かった気がする.mod_proxy_ajpというパッケージがzypperで見つからないけど,mod_proxy_ajpは標準モジュールだから,apache2.2のインストールと共にインストールされるんだな.
インストール
yastでapache2とtomcat6をインストールする. (yast-> ソフトウェアインストール -> yast-http-serverをインストールした.これはやってもやらなくても良い.)
apacheモジュールのインストール
/etc/sysconfigエディタ-> Network/WWW/Apache2 -> APACHE_MODULESでjkを追加する.
/usr/sbin/httpd2 -M
として,apacheがロードしたモジュールを確認.
設定ファイルの編集
$CATALINA_HOME/conf以下にworkers.propertiesを作る.
# lv $CATALINA_HOME/conf/workers.properties worker.list=worker1 worker.worker1.port=8009 worker.worker1.host=localhost worker.worker1.type=ajp13
/usr/share/doc/packages/apache2-mod_jk/jk.confにjk.confの雛形があるので,/etc/apache2/conf.dにコピーする.
# lv /usr/share/doc/packages/apache2-mod_jk/jk.conf # simple configuration for apache (for AJP connector, modul mod_jk.so) <IfModule mod_jk.c> JkWorkersFile /etc/tomcat5/base/workers.properties JkLogFile /var/log/tomcat5/base/mod_jk.log # Log level to be used by mod_jk JkLogLevel error # The following line makes apache aware of the location of # the /servlets-examples context Alias /servlets-examples "/srv/www/tomcat5/base/webapps/servlets-examples" <Directory "/srv/www/tomcat5/base/webapps/servlets-examples"> Options Indexes FollowSymLinks allow from all </Directory> # The following line makes apache aware of the location of # the /jsp-examples context Alias /jsp-examples "/srv/www/tomcat5/base/webapps/jsp-examples" <Directory "/srv/www/tomcat5/base/webapps/jsp-examples"> Options Indexes FollowSymLinks allow from all </Directory> # The following line mounts all JSP files and the /servlet/ uri to tomcat JkMount /servlets-examples/servlet/* ajp13 JkMount /jsp-examples/*.jsp ajp13 # The following line prohibits users from directly accessing WEB-INF <Location "/jsp-examples/WEB-INF/"> AllowOverride None deny from all </Location> <Location "/servlets-examples/WEB-INF/"> AllowOverride None deny from all </Location> </IfModule>
上記設定ファイルの"Alias /servlets-examples"あたりを参考に,自分の呼び出したいサーブレットを呼び出すような設定を書けばOK.
トラブルシューティング
バーチャルホストの扱いに注意する.
Re: Apache2.2 / Tomcat6 / mod_jk / Suse 11.1 I figured out what was wrong: VirtualHosts. I configured two virtual hosts in apache. The tomcat connector (mod_jk) was included in httpd.conf in the top level, outside of a virtual host definition. I was assuming that calls to http://localhost/ would NOT be handled by a virtual host if there was no name-matching virtual host. That was wrong, ALL requests are handled by virtual hosts if you define them. If no matching host is found, the first one listed is used. Hence, moving the jk config inside a virtual host element solved the problem. So, I included the following in a VirtualHost element.
2011-12-08(Thu) [長年日記] 編集
[ssh][openSUSE] ssh(sshd)のトラブルシューティング
localhostから接続できるか確認する
localhostから繋がるかを確認する.つながらなかったら,ネットワークではなく,sshdの方が原因の可能性が高い.つながったら,ネットワークの方が怪しい.
ネットワークの疎通を確認する
ネットワークに接続出来ているか確認する.ネットワークに接続できない - yuu_nkjm blog(2012-02-03).また,tsharkを使って22番ポートにパケットが到達しているかを調べる.TCP/UDPパケットをtshark(Wireshark)でキャプチャ - yuu_nkjm blog(2008-08-19).
ssh hoge@localhost
ファイヤウォールやパケットフィルタソフト(iptables,suse firewall,fail2banなど)の設定を確認する
こいつらが蹴ってることも多い.
sshdをデバッグモードで起動する
SSHD の詳細なデバッグ情報を表示させる方法 - WebOS Goodiesを参考にした.openSUSEの場合では,yast->/etc/sysconfigエディタ->Network/Remote access/SSHの$SSHD_OPTSに"-d"を与える.より詳細なデバッグログを見れるデバッグモードで起動したい場合は"-d -d"のように重ねる.最大で-dを三つまで並べられる.
デバッグモードで起動するとsshdはforkされない(複数の端末からログインできない)ことに注意する.ログレベルをdebugにするとは違うことに注意する.SSHD (8)
sshdのログレベルを変更するには,sshd_configのLogLevelを変更する.SSHD_CONFIG (5)
#LogLevel INFO デフォルトはINFO LogLevel DEBUG
tail -f /var/log/messages
tailなどを使って,sshdログを監視する.
sshdをIPv4のみで使う
上述の$SSHD_OPTSに"-4"を与える.sshdをv4のみしか扱わないように設定する必要があったことがあったんだけど,なんでだったかな….
鍵でしかログインさせない場合でも,パスワードの設定は必要
Ship of Fools: sshの鍵ファイル認証にてハデにハマる.これか?と思ったけど,関係なかった.結局,ログインしようとしているユーザにpasswordが設定されていないだけだった.
SSH+X11
SSH+X11接続をする場合,X Window Systemが参考になった.
Failed to allocate internet-domain X11 display socket.
というエラーが出た.対策はこちら.X11フォーワディングをしようとしたとき,DISPLAY変数に値が設定されない - yuu_nkjm blog(2011-08-01)
2011-12-09(Fri) [長年日記] 編集
[grub][Linux][openSUSE][boot][Troubleshooting][Linuxお引っ越し] Linux(OS)が起動しなくなったときにGRUBを再インストールする
grubの再インストール1回目
grubを復旧する方法 - 悠々自適にを参考にしたのだと思う.
grub-installを使う
- インストールメディアを入れる.Rescue Systemで起動する.プロンプトが表示されたら"root"と入力する.
- ブート対象のデバイスを/mntにマウントする.今回は,/dev/sdbというHDDの/dev/sdb2にルートが存在した.
mount /dev/sdb2 /mnt
- /mnt/boot/grub/device.mapの内容を確認する.トラブルシューティングも参照の事.
(hd0) /dev/sda (hd1) /dev/sdb
- grubを再インストールする.以下では,root-directoryを/mntに設定している./mntを/とみなした時の/boot(つまり/mnt/boot)以下にgrubのステージ2以降(?)をインストールする.最後の引数はgrubのステージ1(?)のインストールデバイスである.以下では,/dev/sdbのMBRにgrubのステージ1(?)をインストールしている.ちなみに,ステージ1.5はステージ1と同一のところ(次のセクタ)にインストールされると思ってほぼ問題なさそう.通常は,BIOSからブートされるデバイスを指定すれば良いと思う.ブートフラグの要不要に関する調査はしていない.
grub-install.unsupported --root-directory=/mnt /dev/sdb
grubコマンドのrootと--root-directoryオプションが混乱しやすいな.--root-directoryは単にgrub(ステージ2以降)の設定の出力先と思って良さそう.
man grub-install --root-directory=DIR install GRUB images under the directory DIR instead of the root directory
grubの再インストール2回目
grubコマンドのみで再インストール
grub-installの代わりに以下を入力する.最後のinstallコマンドが見えるので,結局こちらの方が分かりやすいかもしれない.(以下,しげふみメモ : SLES10を内蔵ディスクから高速インストールより)
# grub --config-file=/mnt/boot/grub/menu.lst --device-map=/mnt/boot/grub/device.map grub> root (hd1,0) (注:--root-directoryとは異なり,書き込み先ではなく,読み込み先?stage2を探すとき,ここが/になるのかな.) Filesystem type is xfs, partition type 0x83 grub> setup (hd1) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/xfs_stage1_5" exists... yes Running "embed /boot/grub/xfs_stage1_5 (hd1)"... 18 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd1) (hd1)1+18 p (hd1,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done.
トラブルシューティング
does not have any corresponding BIOS drive.エラーが出る 上記のエラーは、高確率で出ます。原因は、grubのdevice.mapとデバイス情報が一致しないため。OpenSUSEでは、HDDのデバイス名が製品番号になっていて、一般的なsda、sdb等の名前と合わない。 1./boot/grub/device.mapを開き、HDDの名前を/dev/sda に変更する。HDDとデバイス名の関係をみるには、fdiskコマンドを用いてHDDを調べる。
device.mapでgrubのインストール先が決まるので,下手にいじると,既存のブートローダを上書きしてしまい,大変なことになる.grub-installに--recheckというオプションがあるが,USBの外付けHDDにOSを入れるようなケースでは,原則使わない方が良さそう.内蔵HDDと外付けHDDのどちらがhd0になるかが混乱しやすいので,操作者が良く分かった上で実行すべき.
grubの再インストール3回目
grubの設定
デバイスの対応付け
/boot/grub/device.map (hd0) /dev/sda (hd1) /dev/sdb
これらはgrubのインストールの時に使われる.
grubのsetupの設定
lv /etc/grub.conf setup stage2=/boot/grub/stage2 --force-lba (hd1) (hd1,1) quit
hd1のMBRにstage1が書き込まれ,hd1,1にstage2があるよ(書くよ)というのを教えていることになるのかな.(そもそも,grub-installコマンドの最終引数と重なっている様に思うが,どうなんだろ.印象としては,grub-installコマンドの最終引数がdevice.mapを見て/dev/xxxからhdxに変換されて,setupに渡されているのではないかと思うが.)
menu.listのチェック
lv /boot/grub/menu.list root (hd0,1) kernel /boot/vmlinuz-3.1.9-1.4-desktop root=/dev/sdb2
BIOSから直接USB HDDを起動するとUSB HDDはhd0となる.それでも,USB HDDは/dev/sdbにマウントされる様だ(内蔵HDDが/dev/sdaになっていた).このメニューリストの編集はgrubのインストールより後に行っても良いはず.
grubのインストール
# hdxという表記は使えなかった. # grub-install.unsupporetd --root-directory=/mnt hd1 # no device. grub-install.unsupporetd --root-directory=/mnt /dev/sdb /usr/sbin/grub-install.unsupported: line 444: /usr/sbin/grub-set-default: No such file or directory /usr/sbin/grub-install.unsupported: line 484: 2761 Bus error $grub_shell --batch $no_floppy --device-map=$device_map > $log_file << EOF root $root_drive setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive quit EOF Installation finished. No error reported. This is the contents of the device map /mnt/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script 'grub-install'. (hd0) /dev/sda (hd1) /dev/sdb
紆余曲折を経たまとめ
# パターンA device (hd0) /dev/sdb # /dev/sdbとして認識されている外付けHDDを(hd0)とする. root (hd0,1) # (hd0,1)を/としてstage2がインストールされる. setup (hd0) # (hd0)のMBRにstage1がインストールされる.
# パターンB device (hd1) /dev/sdb # /dev/sdbとして認識されている外付けHDDを(hd1)とする. root (hd1,1) # (hd1,1)を/としてstage2がインストールされる. setup (hd1) # (hd1)のMBRにstage1がインストールされる.
BIOSから外付けHDDをブートデバイスとして起動すると,パターンAでもパターンBでも外付けHDDのMBRからブートがはじまることになるので,stage1は実行される.
パターンAでは,stage1に「stage2は(hd0,1)を/とした時の/boot/grubに格納されている」と書かれている.パターンBでは,stage1に「stage2は(hd0,1)を/とした時の/boot/grubに格納されている」と書かれている.BIOSから外付けHDDをブートデバイスとして起動すると,外付けHDDはhd0として認識されるので,前者の設定をしないとstage2を見失う.stage2をロードするまでは,grubは(hdn,m)という指定で生きていくしかないんだな.ちなみに,(hdn,m)と書いたとき,nをハードドライブ番号,mをパーティション番号と言う.
参考ページ
- ブート全体のお話し.オススメ.grubもstage1.5がない場合の説明だけど分かりやすい.
ブート ストラップ コンピュータの起動手順grub の動作概要 grub のインストール位置を MBR に指定すると、インストーラは /boot/grub/stage1 に次の編集を施して MBR へ書き込む。 ・元々 MBR に記録されていた BPB とパーティション テーブルを反映する。 ・ブート ドライブの種別を記録する。 ・/boot/grub/stage2 の先頭セクタ位置 (LBA) 情報を記録する。
- grubの説明.図があって分かりやすい.grub回りの知識の確認にオススメ.
エンタープライズ:Linux How-To 第3回:「GRUBによるブートのカスタマイズ」 - /etc/grub.confの説明.grubコマンドによりstage2をインストールする場所は,/etc/grub.confに書くか,grubに--boot-deviceや--install-partitionを与える様だ.
openSUSE 12.2: 第7章 ブートローダ GRUB
7.1.3. /etc/grub.conf ファイル menu.lst と device.map に続く 3 番目に重要な GRUB の設定ファイルとして、 /etc/grub.conf ファイルがあります。このファイルには GRUB シェルに対するコマンドとパラメータが含まれていて、ブートローダを 正しくインストールするのに必要なファイルです: setup --stage2=/boot/grub/stage2 --force-lba (hd0,1) (hd0,1) quit 上記の例では GRUB に対し、最初のハードディスクにある 2 番目のパーティション (hd0,1) にブートローダをインストールし、起動イメージが同じパーティション内に 存在していることを示しています。 --stage2=/boot/grub/stage2 パラメータは、マウント済みのファイルシステムから 第 2 ステージ のイメージをインストールするために 必要なパラメータです。また、 BIOS によっては LBA サポートの実装が誤っている 場合があるため、 --force-lba を指定してその間違った実装を 無視するように指定しています。
- 2段階ブートとgrubの説明.
Tips: grub2とgrub1の扱い方(様々な再セットアップ方法等) - disklessfun’s Wiki*2段階ブートの場合、たとえばこのように、 # grub grub> root (hd1,0) ←rootで指定するのはmenu.lst(grub.conf),stage2等の場所 (注:--root-directoryとは異なり,書き込み先ではなく,読み込み先?) grub> setup (hd1,0) ←setupで指定するのはgrub(grubのstage1)の書き込み先 setupで指定するデバイスをハードディスク(の先頭)ではなくパーティション(の先頭)とします。 上は母艦上の作業としてのサンプルですが、 普通にLinuxをブートし、そのOS上でブートの方式を1段階ブートから2段階ブートに変更する場合であれば、たとえば、 # grub grub> root (hd0,0) ←rootで指定するのはmenu.lst(grub.conf),stage2等の場所 grub> setup (hd0,0) ←setupで指定するのはgrub(grubのstage1)の書き込み先 こんな感じになります。もちろん詳細は適宜自身の環境に合わせて下さい。 マルチブート環境の場合、↑このように、grubをPBR(パーティションの先頭セクタ)にセットアップすることを強く推奨します。
- grubの説明
Gentoo Linux ドキュメント -- ブートローダを設定するコード表示 2.8: GRUBをMBRにインストールする grub> root (hd0,0) (/bootパーティションの場所を指定します) grub> setup (hd0) (MBRにGRUBをインストールします) grub> quit (GRUBシェルを終了します) 注意: GRUBをMBRではなく、特定のパーティションにインストールしたいなら、 setupコマンドの部分を編集して、それが正しいパーティションを指すようにします。 例えば、GRUBを/dev/sda3にインストールしたい場合、setup (hd0,2)というコマンドになります。しかしながら、こういうことをしたいユーザはあまりいません。
- grubコマンドの実行例あり.
しげふみメモ : SLES10を内蔵ディスクから高速インストール - USBメモリからブート
めも - Grub曰く"/dev/*d* does not have any corresponding BIOS drive" - openSUSE
grubを復旧する方法 - 悠々自適に - Ubunts
GRUBブートローダの再インストール | Nibelungen Code - device.mapを直せという話し.
grub の corresponding エラーgrub-install /dev/hda Installation finished. No error reported. This is the contents of the device map /boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (fd0) /dev/fd0 (hd0) /dev/hda (hd1) /dev/hdb
- LinuxRAID1Transition ? アクセンスのおまけ
- GRUB 用語
2.4.3. ルートファイルシステムとGRUB GRUB で言うルートファイルシステムは違う意味の用語になります。GRUB のルートファイルシステムは Linux のルートファイルシステムとは無関係であると覚えておいてください。 GRUB ルートファイルシステムは指定デバイスの最上位部です。例えば、イメージファイル (hd0,0)/grub/splash.xpm.gz は、(hd0,0)パーティション (実際はシステムの/boot/パーティション) の最上位(又はroot)にある /grub/ ディレクトリに格納されます。 次ぎに、オプションとしてカーネルファイルの場所を持ったkernel コマンドが実行されます。Linux カーネルがブートすると、Linux ユーザーに馴染みのルートファイルシステムを設定します。オリジナルの GRUB ルートファイルシステムとそのマウントは無視されます。これらはカーネルファルをブートするためだけに存在します。 詳細については、項2.6のrootコマンドとkernelコマンドを参照してください。
- Windows boot - GNU GRUB Manual 0.97
このページの設定は他のサイトのマルチブートの設定と異なる.分かるような分からないような.mapの効果の範囲がわからん.結局分からん.grubからコマンドを叩く,grub.confに書く,menu.listに書くの場合で,(mapのタイミングなどにより)設定の仕方が異なるのか?map (hd0) (hd1) map (hd1) (hd0) rootnoverify (hd0,0) ← 後者でなく,こっちの設定は納得. # hideしたりしなかったり chainloader +1 boot
title Windows # map (hd0) (hd1) ← この記述は無くても動作する(むしろ,あったら動作しなくない?) map (hd1) (hd0) rootnoverify (hd1,0) ← 上がコメントアウトされていない場合,このhd1ってmapされる前とされた後のどっちや.rootコマンドを叩く位置を変えたら検証できそうだな.mapの効果は,boot以降なのかな. chainloader +1 ← (hd1,0)のチェーンローダが呼ばれるってことだよな.
- 異なるHDDでデュアルブート - ソフトエンジニア現役続行
これは (hd0,0)を書く流儀. - map - GNU GRUB Manual 0.97
"map to_drive from_drive"なことに注意. - DualBoot
よくまとまっている. - openSUSE 12.2: 第7章 ブートローダ GRUB
Windows を 2 台目のハードディスクから起動する方法 Windows のようなオペレーティングシステムでは、 1 台目のハードディスクからのみ 起動することができます。 1 台目以外のハードディスクにそのようなオペレーティング システムをインストールした場合は、関連するメニュー項目を編集することで、論理的な 変更を行なうことができます。 ... title windows map (hd0) (hd1) map (hd1) (hd0) chainloader(hd1,0)+1 ... 上記の例では、 Windows が 2 台目のハードディスクから始まっていることを示して います。ハードディスクの論理的な順序は map コマンドで 変更することができます。この仕組みは、 GRUB のメニューファイルには影響 しません。そのため、 2 台目のハードディスクは chainloader に指定しなければなりません。
最後の1行が重要だと思うけど,意味がはっきりとは分からん.mapコマンド以降に発行されているが,上記のchainloader(hd1,0)+1は(入れ替えとかを考える前の)2台目のHDDの第1パーティションのローダを呼び出しているって事だよな. - In menu option when booting. - Win7PE - reboot.pro, Grub4dos Guide - Map Command grub4dosの"map --hook"みたいなのがあると分かりやすい.腑に落ちない点もあるが,あとはケースバイケースで対応するか.
2011-12-10(Sat) [長年日記] 編集
2011-12-11(Sun) [長年日記] 編集
[iPad/iPodTouch/iPhone] iPad(iPhone/iPod Touch)で複数のGoogleカレンダーを同期,表示する
iPad(iPhone/iPod Touch)で複数のGoogleカレンダーを扱いたい,Googleアカウントに結びつけられたデフォルトカレンダー以外のカレンダーを扱いたいときは,以下の手順を踏めば良い.
Microsoft Exchangeとして,Googleアカウントと結びつける
- 設定->メール/連絡先/カレンダーを選択
- アカウントの追加→Microsoft Exchange
-
メールアドレス:ipadと同期したいGoogleアカウント ドメイン: ユーザー名:ipadと同期したいGoogleアカウント パスワード:対応するパスワード
OKを押す.サーバ:m.google.com
- 同期する内容としてカレンダーをオンにする.必要があれば,連絡先やメールもオンにする.
同期する内容の設定
- iPadからhttp://m.google.com/sync/へアクセス.
- ご利用頂けませんとあるので,言語を変更を選択して,Englishにする.
- 使用するデバイスや,読み込みたいカレンダーを選択して,設定終了
参考ページ
2011-12-12(Mon) [長年日記] 編集
[KVM][Xming] gnome+Xming+puttyでvirt-managerが起動しない
下記のページに紹介されていたコマンドで起動できた.
gnome な環境で virt-manager を動作させる場合には、なんの問題もなく動作するのですけれど、 いざ、Xming のみの環境、もしくは Xming + putty (ssh) を使った接続で実行しようとすると、 dbus 関連のエラーが表示され、動作してくれなかった。
しかし、なにかやってるうちに、virt-manager を実行すれば、dbus-launch が動作するようになってしまった。 違いは .dbus か? とか .gconf か? などと思い、ディレクトリを削除したうえで実行してみたが問題なし。 最後に試していたのは
eval `/usr/bin/dbus-launch --sh-syntax --close-stderr` virt-manager