2014年1月31日金曜日

whoopsieの依存関係でエラー

UbuntuのLiveUSBで遊んでいる。
13.10(Saucy Salamander)の日本語RemixでLiveUSBを作った。
どうせ作るなら、最新の方がいい。新機能を試したり、セキュリティ問題が解決されていたりするからだ。
そして、13.10も、既に200以上のパッケージが更新されている。LiveUSB起動後に、apt-getを使って、更新する事もできるが、casper-rwを無駄に消費してしまう。
というわけで、このへんを見ながら、最新のパッケージに置き換えた、いわば「無精ヒゲRemix」を一旦作って、それでLiveUSBを作っている。

使いながら、「アレも欲しい」「これも欲しい」というのを入れて、「これはいらない」というのを削除して、だんだん自分らしいRemixになってきた。
昨夜、いじっているときに、"whoopsie"の依存関係が満たせないと言うようなメッセージが出て、パッケージ管理がにっちもさっちもいかなくなった。
何度やり直しても、エラーがでる。以下はCD作成時のchroot環境内での作業。
# apt-get upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
これらを直すためには 'apt-get -f install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 whoopsie : 依存: libwhoopsie0 (= 0.2.24.1) しかし、0.2.24.1ubuntu1 はインストールされています
E: 未解決の依存関係があります。-f オプションを試してください。
'-f'を試せと言っているので、試してみても、
# apt-get -f install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下の特別パッケージがインストールされます:
  whoopsie
以下のパッケージはアップグレードされます:
  whoopsie
アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
2 個のパッケージが完全にインストールまたは削除されていません。
26.3 kB のアーカイブを取得する必要があります。
この操作後に追加で 0 B のディスク容量が消費されます。
続行しますか [Y/n]? Y
取得:1 http://jp.archive.ubuntu.com/ubuntu/ saucy-updates/main whoopsie i386 0.2.24.1ubuntu1 [26.3 kB]
26.3 kB を 0秒 で取得しました (200 kB/s)
(データベースを読み込んでいます ... 現在 171634 個のファイルとディレクトリがインストールされています。)
whoopsie 0.2.24.1 を (.../whoopsie_0.2.24.1ubuntu1_i386.deb で) 置換するための準備をしています ...
invoke-rc.d: unknown initscript, /etc/init.d/whoopsie not found.
dpkg: 警告: サブプロセス 古い pre-removal スクリプト はエラー終了ステータス 100 を返しました
dpkg: 代わりに新規パッケージからスクリプトを実行してみます ...
invoke-rc.d: unknown initscript, /etc/init.d/whoopsie not found.
dpkg: /var/cache/apt/archives/whoopsie_0.2.24.1ubuntu1_i386.deb の処理中にエラーが発生しました (--unpack):
 サブプロセス 新しい pre-removal スクリプト はエラー終了ステータス 100 を返しました
invoke-rc.d: unknown initscript, /etc/init.d/whoopsie not found.
dpkg: クリーンアップ中にエラーが発生しました:
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 100 を返しました
処理中にエラーが発生しました:
 /var/cache/apt/archives/whoopsie_0.2.24.1ubuntu1_i386.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
#
だめだ。そもそも、こんなもの要るのか?要らないなら、削除してしまえと思って、調べてみた。
このパッケージは、WindowsのError Reporting ServiceのUbuntu版みたいなやつだ。
なくても、個人的には困らない。コミュニティへの貢献度は多少下がるが、それでパッケージが管理できなくなるのは問題なので、思い切って削除することにした。
しかし、削除しようにも、パッケージの依存関係が解決できないので、削除も実行できない。
削除しろって言ってるのに、言うことを聞かない。なんて、生意気なイモリなんだろう。

いつの間にやら、のっぴきならない状態にハマってしまっていたのだった。

とりあえず、Googleで"whoopsie","0.2.24"で探してみても、解決方法は見つからない。
困っていても、どうにもならない。もう一度、エラーの内容をじっくり見てみる。

'/etc/init.d/whoopsie'が無いので困っているようだ。
Ubuntuでは、SysV initの方法がずいぶん変更になっている。/etc/init.dのスクリプトではなく、initctlを使った物に変更されつつある過渡的状態だ。
その辺の整合性がとれないのだろう。
おそらく、パッケージのスクリプトは、サービスを一旦停止して、入れ替え後に再開したいのだろう。
ということなら、停止/再開がうまく行っているように見せかければ、installやremoveはうまくいくかもしれない。
何でも成功を返す、ダミーの/etc/init.d/whoopsieを作っておいて、一度whoopsieを再installして、
# ln -s /bin/true /etc/init.d/whoopsie
# apt-get  install libwhoopsie0=0.2.24.1ubuntu1 whoopsie=0.2.24.1ubuntu1
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
libwhoopsie0 はすでに最新バージョンです。
以下のパッケージはアップグレードされます:
  whoopsie
アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 1 個。
2 個のパッケージが完全にインストールまたは削除されていません。
26.3 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 0 B のディスク容量が消費されます。
続行しますか [Y/n]? Y
(データベースを読み込んでいます ... 現在 171634 個のファイルとディレクトリがインストールされています。)
whoopsie 0.2.24.1 を (.../whoopsie_0.2.24.1ubuntu1_i386.deb で) 置換するための準備をしています ...
whoopsie を展開し、置換しています...
ureadahead のトリガを処理しています ...
libwhoopsie0 (0.2.24.1ubuntu1) を設定しています ...
whoopsie (0.2.24.1ubuntu1) を設定しています ...
libc-bin のトリガを処理しています ...
#
ここから削除する。
# apt-get remove whoopsie
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
  whoopsie
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 0 個。
この操作後に 113 kB のディスク容量が解放されます。
続行しますか [Y/n]? Y
(データベースを読み込んでいます ... 現在 171633 個のファイルとディレクトリがインストールされています。)
whoopsie を削除しています ...
ureadahead のトリガを処理しています ...
# 
これで、依存関係が満たされ、また普通にパッケージの追加や削除ができるようになった。
またwhoopsieを入れたいなら、もう一度入れなおせばいいだろう(新しいやつに更新できていたのだから)。

追伸: LiveUSBが動かなくなった。
他にも色々いじった後なので、原因はまだ特定されていない。
でも、この操作が問題なのかもしれない。これを使うときには注意せよ。

具体的には、lightDMのログイン画面は出るが、ログインしても画面が真っ暗のままというもの。
ホームディレクトリに作成される".xsession-errors"には、
Script for ibus started at run_im.
Script for auto started at run_im.
Script for default started at run_im.
init: dbus pre-start process (3728) terminated with status 2
というメッセージが出ている。D-Busが動かなければ、何もできないというのも納得だ。

whoopsieのサービスの開始/終了は、/etc/init.dのスクリプトだった。
上にも書いたが/etc/init.dを使うのは時代遅れの方法になりつつあり、今ではinitctlを使うように変わってきてる。このinitctlはランレベルの変更を、D-Bus上でのイベント交換でおこなうようにしたものだ。
つまり、今回のこの無理やりな問題解決も、D-Busに多少絡んでいるとも言えなくもない。

ついでに、母艦の調子も悪い。
母艦では、起動時に「システムプログラムの問題が見つかりました」、「今すぐこの問題を報告しますか?」というダイアログが出る。
母艦はwhoopsieが残っているので、何かあればこういうことになる。
そう言われても意味がわからない(せめて止まったプログラム名だけでも表示されればいいのに)ので、「キャンセル」して、"/var/crash"を見ると、
$ ls -al /var/crash
合計 4764
drwxrwsrwt  2 root whoopsie    4096  1月 31 10:20 .
drwxr-xr-x 13 root root        4096  1月 31 17:33 ..
-rw-rw----  1 root whoopsie       0  1月 31 10:20 .lock
-rw-r-----  1 root whoopsie 4869190  1月 31 10:20 _usr_bin_software-properties-gtk.0.crash
この'software-properties-gtk'ってなんだと思って起動したら、

「アップデートマネージャー」の「設定(S)...」を押したときに出てくるやつだ。
そういえば、二重登録してしまったリポジトリを整理もしたんだっけ。それがらみかな。

なんか余計に作業が増えてしまったような。
ひとつずつ解決していこう。


2017/11/04 一部追記。
すっかり時間が経ってしまったが、LiveUSBが動かなくなったのは、別の原因だった。
はっきりとしたその理由までは忘れてしまった。権限に関係していたと思う。LiveUSBの更新作業時、rootでやるべき作業を一般ユーザ、あるいはその逆をやって、実行時にうまく動作しないものを作ってしまったような記憶がぼんやりとある。
とにかく関係なかった。

2014年1月26日日曜日

マシュマロの食べ方

アメリカ人はマシュマロが好きである。
しかし、自分で食べてみても、あまりおいしとは思わない。
大の男だから、口に合わないのではない。子供のころにも何回か食べたが、特においしいと感じたことはなかった。
口で溶けるわけでもなく、ふかふかしてて、変な食感だ。
アメリカ人は、まずいものばかり食べてるな。と思っていた。

先日、知人から、マシュマロを焼いて食べるとおいしいと聞いた。
そういえば、正月のどんど焼きの餅よろしく、米国のちびっこはサマーキャンプの際に、木の枝にマシュマロを刺して焼いて食べるというのを聞いたことがある。

焼いたら、何かが変わるのかもしれない。
そして、もし焼くものなら、専用の調理器具があるのかもしれないと考えた。
試しにGoogleで、「マシュマロ」「ロースター」という検索ワードで検索しようとした。しかし、うっかり間違えて「トースター」と入力してしまった。そしたら、 「マシュマロトースト」などという食べ物を発見した。

おもしろそうな物を発見した。そして、見つけてしまったからには、実験してみよう。
とはいえ、ご飯星人なので、宗教上の理由によりパンはほとんど食べない。食パンを一斤買ってきて、おいしくなかったら、しばらく苦痛を味わうことになる。

パンの代わりに、ビスケットにマシュマロを乗せて焼いてみることにする。
ウチのチンは、天火の機能もある。ほとんど使ったことはないが、ピザを焼いたり、パンを焼いたりできるらしい。
これで焼いてみた。


出来上がったやつは、こんな感じ。


食べてみると、まるで生クリームのような食感。
温かい生クリームがビスケットに乗っているような感じだ。
ふかふかした変な食感ではない。
子供のころにこれを食べれば、「すごく、おいしい!」と感じるだろう。

焼かずに食べていたから、まずかったのだ。
アメリカ人だからと言って、まずいものを食べていると考えるのは、偏見だったようだ。
アメリカ人から見たら「日本人は、マシュマロまでも、刺身で食べてる。変なやつ。」と、思われているかもしれない。

マシュマロは、ちゃんと焼いて食べましょう。
良い子のみんなは、火を使うときは、大人の人と一緒のときにしましょう。

2014年1月19日日曜日

USBでbootするUbuntu

最近のUbuntuには、「ブータブルUSBの作成」とかいう機能がある。
インストール用のisoイメージから、Ubuntuが起動できるUSBメモリを作る機能だ。

USBメモリも8GBで、1000円しない。作っておけば、PCが起動しなくなった時など、HDDからデータを取り出すために使える。
というわけで、作ってみることにした。

Ubuntuを使っているなら、作るのは、簡単。
まず、CDまたはDVDのイメージを入手する。
日本語版なら、このへんとかからダウンロードする。
それと、USBメモリも用意する。8GBぐらいあれば、persistentの領域(casper-rw)を作って、設定の変更や他のパッケージのinstallもできる。
後から日本語パッケージをインストールできるが、最初から入って入れば、このpersisitent用の領域の消費も抑えられるので、日本語版をインストールしたほうがいいと思う。
また、32bit Ubuntu上では、64bit UbuntuのブータブルUSBは作れないし、その逆もできない。注意せよ。

必要な物が集まったら、USBメモリに2つのパーテションをつくる。
詳細には、基本区画を2つ。
1つは、Bootableイメージを入れるFAT形式の領域。サイズは、isoイメージをしまうのに十分な量。Ubuntu1310を使うなら、1.2GBぐらいあれば充分だ。
2つめは、persistent用のパーティション。フォーマットは、ext4。ext2やext3でもいい。
ここで重要な事は、この2つめのパーティションのボリュームラベルは、必ず"casper-rw"にするということだ。

これでいよいよ、ブータブルUSBを作る。
Gnome classicにしているなら「アプリケーション」「システムツール」「システム管理」「ブータブルUSBの作成」をクリックして、「ブータブルUSBの作成」を起動する。

上側の表で、インストールするisoイメージを選択して、下側の表でinstall先のUSBメモリを選択する。
後は、一番したの、「ブータブルUSBの作成」をクリックする。
途中で、管理者権限が必要で、パスワードの入力などがあるが、それらを入力して待っていれば、作成される。

作成後、動かしてみた。
一発で動いたのはいいが、インストーラでもあるので、勝手にloginしてしまう。
Xがlogin状態だけでなく、CTRL+ALT+Fn[1-6]で表示される画面もloginされた状態になっている。
うっかり、このUSBを落としたら、情報漏洩になってしまう。
せめてlogin画面が出てほしい。(マウントすれば、全部見えるんだけど)

ubuntuというユーザを無理やり削除すれば、loginされた状態ではなくなるのだが、CTRL+ALT+Fn[1-6]の画面が使えない。
レスキュー用でもあるので、いろいろな使い方ができたほうがいい。

/etc/init/tty[1-6].conf が、自動ログインするようになっているため、こんなことになる。
じゃ、書き換えればと思って、このファイルを書き換えても、再起動すると、自動ログインに戻ってしまう。
起動時に、どこかでこのファイルを書き換えているようだ。
しかし、どこで?
/etc/initや、/etc/init.dを調べたり、rc を調べたりしたが、それらしい記述はない。

実はinitrdの中にあった。
initrd内の、scripts/casper-bottom/25configure_initが書き換えている。
この書き換えを抑制するには、25行付近の"$USERNAME"をヌル文字列("")にする。
initrdを展開、書き換え、再構築してみると、自動ログインしなくなった。

とりあえず、これで使えるようになった。
もう少し使いながら、他の問題がないか見ていこう。