読者です 読者をやめる 読者になる 読者になる

解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

【Portage】package.* くらいならヘルパーツール無くてもなんとかなる

Gentoo の デフォルトのパッケージマネージャである Portage では、設定ファイルは /etc/portage 以下に置くのがデフォルトで、テキストファイル(+ディレクトリを作成して整頓しても可)です。

Portage のコマンドの1つである) emerge でインストールしようとした時に、 USE フラグの設定が合わないとか、maskされていてインストール禁止になっている(unmask が必要だ)とかいうことがあります。

そのときに、必要な設定に書き換えてくれる機能も emerge にはあります( --autounmask-write オプション。 詳しくは LC_ALL=C man 1 emerge 参照)。 ただこのときに記録される設定は(CONFIG_PROTECT がかかっているから)一時ファイルで保管されていますので、 etc-update (または conf-update など)を実行して本番ファイルに確定しないといけないはずです。

そこでほかには、app-portage/flaggie のようなツールを使う手段もあります。 (ちなみに、作者のMichał Górny氏はGentoo及びFuntooで活躍している主要な人物の1人で、その名をよくみかけます。)

ただ、そもそも設定は単なるテキストファイルなんですから、テキストエディタや、さらには(Gentoo Wiki ではよく見かけることですが)echoとリダイレクトでも構わないわけです。 (${EDITOR} をちゃんとexportしてあれば)sudoedit でコンソール上から、あるいはGUIテキストエディタなら gksudo でエディタを起動して編集してもいいわけです。

「リダイレクトは一般ユーザだと使えないだろ」ということになりますが、その代わりに | sudo tee -a [filename] があります(append の -a オプションを忘れると overwrite になるから注意)。

さらに考えれば当然ですが、sudo sed ですね、ストリームエディタでも編集可能なんですから、USEフラグの書き換えもやれますよね。

$ sed -n -e '/mpv/p' /etc/portage/package.use
media-video/mpv libass egl cdio -enca vdpau -xscreensaver
$ sudo sed -e '/mpv/{s/vdpau/-vdpau/}' /etc/portage/package.use -i

言うまでもなく、 make.conf 内の USE にフラグを加えたり消したりすることも可能になります。

ここでのsedの使用は極端な例ですが、一般的にもsedを使えるようになっておいたほうが良いです。 sed一つでユーザエクスペリエンスがすっかり変わります。 flaggieは特定用途にしか使えませんが、 sedGNU/LinuxUNIX などで一般用途に使えるのですから。

また、ファイルの内容をソートして書きかえたいときには

$ sort [filename] | sudo sponge [filename]

という方法があります。 なお、sponge は sys-apps/moreutils に入っています。 リダイレクトやteeだとテンポラリファイルに書きだしたあとに mv でもしないとファイルが壊れますが、 sponge ならば直接に書き換え可能です。


この投稿は qiita.com の2日めの記事です。

もちろん、抜けを埋めたくて埋めているだけで、この名も無き私ですから無理して書く必要なんてないんですが、 この調子で行くとネタがマジで切れる、略して「ネタがマジ切れ」(笑)になりそうです。