ubuntuで働く -2ページ目

ubuntuで働く

仕事で使うPCもubuntuで。

Windows7のブートマネージャの編集は、bcdedit.exeというツールを使用して行うのだが、その前に、ubuntuのブートレコードのイメージを用意しておかなければならない。

拙者はそれを忘れてさっさとLiveCDを終了させてしまったので、再度LiveCDでubuntuを起動する。ブートレコードのイメージファイルは、次のようにして作成できる。

LiveCDでubuntuを起動し、メニューパネルの「メニュー」→「アクセサリ」→「端末」を開き、次のコマンドを実行する。

# sudo dd if=[ubuntuのインストールされたデバイス] of=適当なファイル名 bs=512 count=1

例)$ sudo dd if=/dev/sda3 of=./ubuntu.img bs=512 count=1

(「ubuntuがインストールされたデバイス」が分からない場合は、メニューパネルの「システム管理」→「ディスク管理」を開けば確認できる)

次いで、メニューパネルの「場所」からWindowsのボリュームを選んでマウントし、WindowsのC:¥のフォルダにubuntu.imgをコピーする。

例)$ cp ./ubuntu.img /media/disk/System

C:¥のフォルダの名称(ここでは"System")は、Windowsのボリュームをマウントした時にデスクトップに表示されるフォルダ名がこれにあたる。

LiveCDを終了し、Windows7を起動して、いよいよbcdeditの実行だ。

bcdedit.exeはWindowsの管理者権限がないと実行できないので、DOSプロンプトを管理者権限で起動する。Windowsなんぞ久しく使っていない(こういったインストールの時くらいしか使わない)ので、「Windowsに管理者権限なんて概念があったのか」と、違うところで感心してしまう。

DOSプロンプトを起動するにはWindowsキー+Rしたあとcmdと打ってEnterキーを押すのだが、この時、確か、WindowsキーとCtrlキーか何かを押しながらEnterキーを押すことで、管理者権限によりcmdが実行されるようだ。

bcdeditの使い方はbcdedit /?とか、bcdedit /? とか打てばヘルプが表示されるので、それを見ながら適当に実施すればよい。

C:¥> bcdedit

現在のブート構成データが表示されるので、念のためメモしておく。

C:¥> bcdedit /create /d "Ubuntu 10.04" /application bootsector

と実行すると、新しいエントリ用のUIDを生成してくれる。

C:¥> bcdedit /set <新しいエントリのUID> device partition=C:
C:¥> bcdedit /set <新しいエントリのUID> path ¥ubuntu.img

この段階ではまだ新しいエントリはMBR自体には書き込まれていない。次いで、MBRにおけるOSの表示順序を決める。/addlastで最下位に、/addfirstで最上位に追加される。ubuntuがメインのOSなので、当然/addfirstを指定する。

C:¥> bcdedit /displayorder <新しいエントリのUID> /addfirst

これにより、始めてMBRに新しいエントリが書き込まれる(多分)。bcdeditをオプション無しで実行し、"Ubuntu 10.04"のエントリが最上位に追加されていることを確認したら終了だ。
新しいノートPCを1台手に入れたので、遅ればせながら、リリース後1年を迎えようとしているubuntu10.04をインストールした。相変わらずスクリーンショットなど取り忘れた(取る気がない)ので、記憶だけでレビューする。

まずは、Windows7がプリインストールされてしまっているので、Dドライブを潰してCドライブもさらに縮小させてubuntu用の領域を確保する。

WIndowsはXP以来ほとんど使ったことがないので、Windows7の操作の方にむしろドギマギしたのだが、最近のWindowsには標準でパーティショニングツールが備わっているらしい。WIndowsのスタートメニューの「管理」だか何だかのメニューを右クリックすると出てくる(多分)「ディスクの管理」ツールでディスク領域の変更ができる。

操作はいたって簡単で、DドライブをつぶしたければDドライブを選択してボリュームの削除だとか縮小だとかを選んで適当にubuntu用の空き領域を作ればよい。拙者は長いこと20GBくらいのHDDで仕事をしてきたので、320GBなどという大容量のディスクを前に狼狽しつつも120GBほど確保した。フォーマットはしてもしなくても良い。

続いてLiveCDでubuntuを起動して、起動後のデスクトップにある「Ubuntuをインストール」だか何だかのアイコンをクリックしてインストーラを起動。

言語やタイムゾーンの設定は特に迷うことはないだろう。ただし、インターネットにつながっていない状態でタイムゾーンの設定を行うと、日本時間を選んだ際に、既に設定されている正しいシステムの時刻に、さらにGMT+9時間分を上乗せしやがるため、9時間ずれる(早まる)。インストール後に手動で直すしかないのだが、進んだ時間を戻すというのは、インストール時に作成されたファイル等のタイムスタンプに矛盾が生じることになるため、非常によろしくない。

その他、インストールの過程で登場する日本語の訳には相変わらず直感でピンとこないものが多いのだが、迷ったのはパーティション構成の選択肢だ。「別のものとしてインストール」とは何なのだろうと5分悩む。結局、手動で行う分にはむしろ事故はないだろう、と「手動でパーティションを設定」だか何かを選択。

「手動でパーティションを設定」を選択するとスライスの構成を問われるのだが、この操作もわかりづらい。まず、ubuntu用に確保しておいたボリューム(/dev/sda3とか)を選んで「新しいパーティションテーブル」だか何だかをクリックすることで、その上にスライスを構成できるようになる。

次に、「追加」だか何だかをクリックすると、スライスを1つ追加できる。シンプルにルート( / )のみの構成とし、swapには搭載メモリの2.5倍の10GBをあてた(以前、swapが少なすぎてスリープ機能が使えないという問題に当たったため多めに)。ルート(/)スライスには110GBくらいを割り当てて、ファイルシステムは"Ext4"を選択。swapスライスには10GBくらい(残り)を割り当てて、ファイルシステムとしては"swap"を選択すればよい。

それからユーザの設定を行うのだが、ここで見慣れない「ホームフォルダの複合化時にパスワードを要求する」という選択肢が登場する。以前のバージョンにもあったのかも知れないが、拙者は覚えていない。複合化する、というくらいだから、その前提としてホームフォルダを暗号化するということなのだろう。これもわかりづらい。

実はこの時、拙者はubuntuのディスクボリューム全体を暗号化したいと考えていた(というより、暗号化できないかと考えていた)ため、あえてホームディレクトリ単体の暗号化は行わず先へ進んだ。

そして最も重要な、お決まりの地雷である「Grubのインストール先」の設定は、インストール項目一番最後の「拡張」ボタンの先に隠れているので、これも忘れずに行う。もちろん、Grubのインストール先は、デフォルトのMBRではなく今回ubuntuをインストールするパーティションに変更する。

あとはインストールが終わるのをひたすら待つ。

インストールが完了したら、続いてMBRにあるWIndowsのブートマネージャを編集し、新たに追加したubuntuのGrubを呼び出せるようにする。

やはりここでもWindows7の知識が皆無のため悩んだ。XPであれば、boot.iniをエディタで編集するだけだったのだが、Windows7ではboot.iniではなく、専用の編集ツールを使用するらしい。bcdedit.exeだ。

(続く)
今更ながら、自宅に無線LANを導入した。

拙者の自宅のUbuntuマシンは、6年ほど前に購入したデスクトップPCで動いているため、無線LANの受信機が装備されていない。

そこでPlanexのUSBタイプの受信機を購入。デバイス認識には問題がなく、電波の強度も(見た目上)問題なく、無線ルータからのDHCPも問題ないのだが、とにかく動作が不安定なのである。

全く問題なくインターネットアクセスできているかと思えば、突然、速度が数Kbps程度まで落ちたり、あるいは突然1分ほどアクセスできなくなったりする。IP的に切断されるわけではなく、Firefoxのステータスで言えば、「アドレスを解決しています...」で止まってしまう状態だ。

さらに、最大の問題は、全く予兆なしに突然ハングアップしてしまうことである。これについては、コアダンプでも取ってみるべきだろうが、面倒になってやっていない。

試しに、無線LAN標準装備のノートPCで動いているUbuntuマシンを接続してみた。このUbuntuマシンは、これまで様々な無線LANに接続してきたが全く問題が生じていないマシンである。

すると、この優秀なUbuntuノートもあっさりハングアップしてしまった。しかも、デスクトップUbuntuよりもはるかに短い時間でハングするようだ(一方で、Ubuntuノートでは速度低下やアクセス不可が起きることはない)。

これだけから考えると、無線の受信機側というより、無線ルータとUbuntuの相性の問題のように思える。

他社の無線ルータを買い替えるか借りてくるかして、さらに問題を切り分けてみようかとも思ったが、なんだかいろいろと面倒になったので、Mac Bookを買ってきた。Macは今のところ無線LANに問題なくつながっている(やや、速度が遅いような気はするが)。
拙者は所謂「プログラマ」ではなく、開発者ですらないのだが、プログラミングについては若干素養がある。

このため、業務上、面倒なルーチンワークや複雑な集計が必要な場合は、プログラムを書いて片付けることが良くある。

効率が段違いなので、基礎的なプログラミング技術は、プログラマでなくても身につけておいて損のない技術だと思う。

最も重宝するのは、当然シェルスクリプトだ。拙者がubuntuを使っているのはシェルスクリプトの存在が大きい。

しかし、シェルスクリプトだけでは実現できない、あるいはかえって苦労するような処理もある。特に、文字列の処理だ。このような場合は、さらに他の言語を使用する。

この程度の使い道しかしない人にとって使いやすいプログラミング言語は、やはりperlだろう。

なぜperlが良いのかはgoogle先生に尋ねればいくらでも解があるので割愛する。

さて、ubuntuにはperlが標準装備されているので、すぐに使うことができる。

/usr/bin/perl

実例は次回にするとして、使えそうな言語をもう一つ。pythonだ。

拙者はperlだけで何でも十分できていたので、他の言語は必要なく、興味もなかった。

しかし、あのgoogleが好んで利用しているということもあり、どれほどのものか少しだけ試してみたのだ。

感想としてはかなり良い。

pythonもubuntuに標準装備されているので、すぐに利用できる。

/usr/bin/python

詳細は次回。
先日、カーネルのアップデートをしたところ、また「menu.lstをどうすんねや」と聞かれた。

What would you like to do about menu.lst?

前回はこの回答として「パッケージメンテナのバージョンをインストール」を選択したのだが、その結果、最新のカーネルについてのエントリがmenu.lstに追記され、さらに既存のカーネルについても、そのルートスライスの情報(hd0,5とかhd0,7とか)が強制的に書き直されるということが分かった。

この時、書き直しに使われるルートスライスの情報は、menu.lstの中の

#groot=(hd0,*)

で指定されている値が用いられる。

拙者のPCの場合、パーティション構成をいろいろといじくっているので、このgrootを正しいスライスの番号に書き直してから「パッケージメンテナのバージョンをインストール」しないと、全てのカーネルのルートスライスが書き換わり、起動できなくなってしまう。

さて、以上のような挙動については前回学んだので、今回は違うオプションを試してみようということで、

「現在インストールされているローカルのバージョンを保持」(だったかな)

を選択してみた。

結果としては、menu.lstには変更が行われず、そのまま残った。しかし、ファイル自体のタイムスタンプは変更されている。事前にmenu.lsをバックアップしておいてdiffを取ってみれば良かった。

それはさておき、menu.lstに変更が行われないので、インストールされた最新のカーネルの分のエントリについては、自分でmenu.lstを編集して追記しなければならない。

基本的には、現行カーネルのエントリを丸ごとコピー&ペーストして、ペーストしたエントリのリリース番号だけを最新のものに変更してやればよい。