こんにちは、山田ハヤオです。Arch Linuxを毎日使っています。
Arch LinuxはパッケージマネージャとしてPacmanが使用されています。
有名なパッケージマネージャはapt/dpkgやdnf/rpmですが、私はこのPacmanが大好きです。
ということで、今回から何度かに分けてArch LinuxのPacmanについての解説記事を投稿しようと思います。
Pacman解説シリーズ①
今回は第1回ということで、あまりコードは書かずに何がそんなに良いのかについてと簡単なカスタマイズを解説しようと思います。
Pacmanとは
Pacmanは主に「pacman」「makepkg」「repo-add」「pacman-conf」といったコマンドで構成されるパッケージマネジメントシステムです。
実際には「libalpm」というライブラリのフロントエンドとして動作をしています。
(ALPMはArch Linux Package Manager)の略です。
主にC、Bash、Pythonで書かれていてパッケージもシェルスクリプトを使って作成します。
Arch Linuxやその派生OSで使われているシステムですが、MSYS2などでも使用されています。
Pacmanのいいところ
構造がとてもシンプル
Pacmanは構造が非常にシンプルです。正確にはバックエンドのlibalpmがシンプルです。
例えば、全てのデータベースは単純なテキストファイルですし、パッケージ本体も単純なtarアーカイブです。
もしなにか問題が発生しても、だいたいのことは少しのコマンドで解決できますし、最悪はデータベースを手で編集すれば解決できます。
また、パッケージも数行のシェルスクリプトを書けば作成できるので、非常に楽です。
Pacmanは/homeと/boot以外の全てをデータベースによって完全に管理します。
そのため環境が汚れるといったことがありません。また、公式パッケージは全てクリーンなChroot環境下でビルドされるので安全です。
シンプルだから高速
シンプルであるがゆえに、非常に高速に動作します。
パッケージのダウンロードは並列ダウンロードによって高速化され、パッケージの圧縮にも最新のZ Standardが使用されています。
シンプルだから弄りやすい
パッケージの作成はシェルスクリプトで行うので、非常に自由度が高いです。
Aptなどのように各自でMetaファイルやMakefileを作成する必要はありません。
また、設定ファイルは/etc/pacman.confと/etc/makepkg.confのみです。
pacman.confはINIファイルで、Pacmanの動作とリポジトリの一覧が定義されています。
makepkg.confはシェルスクリプトで、パッケージのコンパイルに関する設定が行われています。
これらの設定ファイルはかなり細かい部分までイジることができます。
どれくらい深く設定できるかというと、外部ツールを使わないでx86_64上で32Bitのパッケージを作成できるくらい細かく設定できます。
Alter Linuxのビルドもこれらの設定ファイルをフル活用して行われています。
/etc/pacman.conf
/etc/pacman.confはパッケージマネージャをコントロールするファイルです。
中身はINIファイルで、いくつかのセクションで構成されています。
optionsセクション
optionsセクションは、全てのpacman.confに存在する唯一のセクションです。
なぜなら、optionsセクション以外のセクションは全てリポジトリの定義だからです。
optionsでは、pacmanの動作に関する全ての設定を行います。
全ての設定を解説するには、このブログではあまりにも狭すぎるので、ここでは変更することで有用ないくつかの設定のみを紹介します。
逆に、以下以外の設定はPacmanのあまりにも根本的な部分に影響しているため、自分が何をしようとしているか理解している場合以外は、絶対に変更しないでください。
ParallelDownloads
Pacman V6で追加された新しい設定です。
並列ダウンロードをする場合の同時ダウンロード数を指定します。
1に設定すると並列ダウンロードは無効化され、2以上に設定するとその数だけダウンロードを並列して行います。
あまりにも大量に同時ダウンロードを行うのはサーバに重い負荷をかけることにつながるのでするべきではありませんが、2~5程度なら問題ないと思います。
CacheDir
ダウンロードしたパッケージのキャッシュを置く場所です。
ダウンロードされたパッケージファイルは全てこのディレクトリ直下に配置されます。
緊急時にはこのディレクトリに残っているデータからパッケージをダウングレードすることもあります。
手動で削除しない限りどんどんと溜まっていくので、注意が必要です。
このディレクトリをSSDに設定すれば、インストールは高速化されますし、大容量なHDDに設定すれば多くのキャッシュを保存し、/の圧迫を避けることができます。
Alter Linuxのビルドでは、作業ディレクトリ内に専用のキャッシュを作成し、複数エディションの連続したビルドを高速化しています。
IgnorePkg
IgnorePkgは更新を無視するパッケージの一覧です。
ここに指定したパッケージはアップデートされることがなくなります。
新しいバージョンにすることで不具合が出てしまう場合などに非常に有用です。
Pacmanはシステムの部分アップデートを公式にサポートしていません。
あくまで一時的な対処としてのみ使用し、恒久的に使用することは避けてください。
また、古いパッケージを使い続けることでゼロデイ攻撃などの対象にされる危険性もあります。
最後に
次回は実際のパッケージの作成をしていこうと思います。
また、今後にはリポジトリの構築やデータベースの解析、makepkgのソースコードの解読などもしていけたらなと考えています。
Arch Linuxを完全に掌握して自由に弄るための必需品ですので、ぜひこれらの投稿を通してArch Linuxを楽しんでいただければと思います。
それでは、また今度。
コメント