月別アーカイブ: 2012年12月

特定のファイルがどのパッケージに含まれているかを調べる

あるファイルがどのパッケージに含まれているかを調べたいことはよくあります。

既にインストールされたものの中から探すのなら、dpkg -Sが使えます。

$ dpkg -S /bin/ls

coreutils: /bin/ls

しかしこれは線形探索なので、結構時間がかかります。また、インストールされていないファイルに対しては調べられません。

一応、Webで探索できるページ(http://packages.debian.org/ja/)も用意されていますが、オフラインのときには使えません。

ftpサイトのdebian/dists/(stable|testing|unstable)/Contents-(i386|amd64|…).gzというファイルに、そのアーキテクチャの全パッケージのファイルリストがあるので、これをあらかじめ取得しておいて調べるという方法もあります。

しかし、そこまでやるならapt-fileを使った方がよいでしょう。apt-fileはContents-$arch.gzを取得してインデックス化してくれるので、検索も高速です。

~$ sudo apt-file update
[sudo] password for knok:
Downloading Index http://ftp.jp.debian.org/debian/dists/squeeze/Contents-amd64.diff/Index:
No Index available.
Downloading complete file http://ftp.jp.debian.org/debian/dists/squeeze/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 17.4M  100 17.4M    0     0  1260k      0  0:00:14  0:00:14 --:--:-- 1942k
Ignoring source without Contents File:

http://security.debian.org/dists/squeeze/updates/Contents-amd64.gz

Downloading Index http://ftp.jp.debian.org/debian/dists/squeeze-updates/Contents-amd64.diff/Index:
No Index available.
Downloading complete file http://ftp.jp.debian.org/debian/dists/squeeze-updates/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 18592  100 18592    0     0    97k      0 --:--:-- --:--:-- --:--:--  103k
Downloading complete file http://packages.groonga.org/debian/dists/squeeze/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12547  100 12547    0     0   235k      0 --:--:-- --:--:-- --:--:--  291k
Downloading complete file http://backports.debian.org/debian-backports/dists/squeeze-backports/Contents-amd64.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 2072k  100 2072k    0     0   276k      0  0:00:07  0:00:07 --:--:--  462k
$ apt-file search /bin/ls
9base: /usr/lib/plan9/bin/ls
canna-utils: /usr/bin/lsdic
cgroup-bin: /usr/bin/lscgroup
cgroup-bin: /usr/bin/lssubsys
coreutils: /bin/ls
(中略)
radare-common: /usr/lib/radare/bin/lsbstego
suckless-tools: /usr/bin/lsw
syslinux-common: /usr/bin/lss16toppm
unar: /usr/bin/lsar
usbutils: /usr/bin/lsusb
util-linux: /usr/bin/lscpu
xen-utils-4.0: /usr/lib/xen-4.0/bin/lsevtchn

同様のことができるパッケージは他にもあります(auto-apt等)。うまく活用するとよいでしょう。

Debian/Ubuntu JP Advent Calendar 2012 – grub2のデフォルト起動エントリーを変更する

この記事は Debian/Ubuntu JP Advent Calendar 2012 : ATND の 12/6(木) の記事です。

今日のお題はDebianのデフォルトブートローダーであるgrub2の起動エントリーを変更する方法について紹介します。

現在のgrub2は設定ファイルである/boot/grub/grub.cfgを直接編集することはなく、基本的な制御は/etc/default/grubを編集し、update-grubを実行することでgrub.cfgを再生性させる使い方が正しいとされています。

デフォルトでインストールされる/etc/default/grubでは、エントリーの一番先頭がデフォルトで選択されるようになっています(GRUB_DEFAULT=0)。複数のOSをインストールしている環境では、毎回カーソルキーで起動OSを選択するのは面倒だと思うので、一度選択したエントリーを記憶させるモードを使っている人も多いと思います。

具体的には、以下のような感じに/etc/default/grubを書き換えます。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

#GRUB_DEFAULT=0
GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved

GRUB_DEFAULT=0をGRUB_DEFAULT=savedにかえ、GRUB_SAVEDEFAULT=trueを追加します。これで次回起動したOSのエントリーが/boot/grub/grubenvにsaved_entry=OS Entry Nameという形で保存されます。

これは、Debianが起動中であればgrub-set-defaultコマンドで変更させることができます。エントリー名はgrub.cfgのなかでmenuentry命令で定義しているので、grepしてみればどういう名前で登録されているかがわかります。

# grep menuentry /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
menuentry "Windows 8 (loader) (on /dev/sda1)" --class windows --class os {

たとえばこの状態で、grub-set-default “Windows 8 (loader) (on /dev/sda1)”を実行すれば、grubenvが書き換わり次回の起動時に自動的にWindows8を起動するエントリーが初期選択される状態になります。

これで、リモートから起動するOSを変更することも可能です。

過去の記事、「Windons7のVirtualBoxでデュアルブート用のraw partitionにあるLinuxを起動させる」と連携すれば、Windows OS側で一度VirtualBoxを起動し、その中のDebianでgrub-set-defaultを実行することで、Windowsでもgrubのエントリー変更させることが間接的に可能です。できれば直接Windowsでgrubenvの修正ができるとよいのですが、/boot/grub以下の読み書きができないといけないのでちょっと難しいでしょうね。

 

ヘッドマウントディスプレイHMZ-T2を購入

長らくヘッドマウントディスプレイ(HMD)が欲しかったのですが、たいていは640×480程度の解像度だったり、10万円以上したりして実際に買うまでには至りませんでした。

しかしSONYからHDMI入力可能で720pまで表示でき、価格は7万円を切るHMZ-T2という機種が出たので、ついに買ってしまいました。この機種の前にHMZ-T1という機種を出していたのですが、ヘッドフォンが備え付けという欠点をもっていだのですが、新機種ではミニジャックで自分の好きなヘッドフォンを利用できます。
使用感
今のところ、主にThinkPad Edge E130とつなげて使っています。HMZ-T2の電源を入れるとデフォルトでミラーディスプレイとして動作します。E130は1366×768なので微妙に720pを超えるサイズなのですが、中央部分がHMZ側に表示されます。
装着してみると、意外とディスプレイ部分が重いです。カタログによると約330gとのことで、これでも旧機種より若干かるくなっているそうです。重みでちょうど焦点が合うように設計されているようで、正面を向かない姿勢ではちょっとずれたりします。うまく調整すればまあ寝たまま見られなくもないのですが、そのあたりかなりセンシティブです。手を添えて固定するのはちょっとうれしくないので、そのあたりもう少し改善してほしいところです。
レンズの周りに差し込む遮光版があるのですが、自分は使っていません。おそらくしっかり遮光すると、没入感がより高まるだろうなとは思います。フェードアウトするような場面を見ていると本当に映画館で映像を見ているような感覚を受けます。
オーディオ出力デバイスが選べるようになったため、それに合わせたモード(インナーヘッドホン、オーバーヘッドヘッドホン)が用意されています。自分は付属のインナーヘッドホンしか使っていないので、違いについてはなんとも評価できません。
オーディオ出力もHDMI経由なのですが、Windows7で利用しているとアプリケーションの起動したときとHDMIポートに刺したときとのタイミングによっては、HDMIに音声がきちんとでない場合があるようです。そういう時は、HDMIに刺した状態でアプリケーションを起動し直せば治るようです。ニコ生を見るときにこの現象にあったので、かなり焦りました。
残念ながら3Dモードは未体験です。PS3のいくつかのソフトが対応しているとのことで、廉価版Call Of Duty Black Opsを買いましたが、他のゲームをやってばっかりでまだ試せていません。
ImpressのGAME Watchに検証記事がありますが、ゲームモードだと遅延が2フレーム程度あるそうです。対戦ゲームだとちょっと厳しいかもしれません。
ともかく、好きな態勢で寝ながら画面を見るという自分の希望が達成できたので、まあ満足しています。早くこの手のデバイスがフルHDになってほしいところです。

Debian Advent Calendar – cron-aptで常に最新状態を保つ

私はDebianの中でもStableを好んで使っています。Debianパッケージされたソフトウェアのなかで、脆弱性が見つかるとそれを修正したものを提供してくれる点が気に入っています。

過去、DSA(Debian Security Advisory)を常に見張りながら報告があるたびにapt-get upgradeをするという運用をしていたのですが、うっかり更新ミスをしてしまったがために外部からの侵入を許してしまったことがあります。

そういった事態に陥らないために、stableを常用している人はぜひcron-aptを入れましょう。cron-aptは毎日apt-get update, upgradeを実施してくれるパッケージです。しかしながら、デフォルトでは更新されたパッケージをダウンロードするだけで、インストールはしてくれません。

インストールまで自動化するためには、/etc/cron-apt/action.d/3-downloadの内容を修正しましょう。標準では以下のようになっています。

dist-upgrade -d -y -o APT::Get::Show-Upgraded=true

これはapt-getに与えられる引数です。この中から、”-d”オプションを取り除きます

dist-upgrade -y -o APT::Get::Show-Upgraded=true

これで自動的にインストールまでが行われます。なにか失敗があったとき(たまたまミラーサーバーが止まっていたりなど)は、cronでメールがrootに飛んでくるので見落とさないようにしましょう。