データセンターのサーバ群

パッケージ管理

ページ作成日 2016/4/27
ページ更新日 2020/4/14

ソフトウェアは、「生もの」で、バグやセキュリティの修正の観点から、最新のバージョンにアップデートする事が望ましいものの、一方で、人によって開発されているためバージョンアップによって不具合が発生する事もあります。
Slackwareは、セキュリティと安定性を鑑みつつ、ソフトウェアの更新をしていく点で、非常にバランス感覚が優れています。

ソフトウェアの更新頻度が上がり、Slackwareのバージョン番号の更新とリリースは、マイルストーンというよりはスナップショットになり、Slackwareのメジャー番号(整数部)は上がらなくなり、マイナー番号(小数部)の番号が上がっています。
従って、最新のSlackwareのリリースのバージョン番号は、14.1から14.2となりました。
そして、15.0のリリースは延期されていて、実質的にローリングリリースとなっています。

Slackware-currentをインストールして、そちらをソースレポジトリとして、システムを更新し続ける運用がSlackwareのユーザの間では一般的になっています。
Slackware-currentは、ほぼ日次で更新されています。
Slackwareは、slackpkgというパッケージマネージャを利用し、更新情報をチェックして、更新します。

slackpkg

Slackwareには、slackpkgというパッケージ管理ツールがあります。
元々は、Third Partyツールとして、Piter Punk氏によって開発されてきたものですが、9.1からextraフォルダに取り込まれ、12.2でapカテゴリに正式に採用されました。

初期設定

まずは、slackpkgが入っているかどうか、確認します。
slackpkgは/usr/sbinに入っている特権ユーザ用のコマンドなので、一般ユーザでは使えないですし、存在が見えません。
rootにsuして、whichコマンドで確認します。


$ su
パスワード:
# which slackpkg
/usr/sbin/slackpkg

もしも、12.2より以前のSlackwareを使っていてslackpkgが入っていない場合は、色々とパッケージの内容が変更になっているので、Slackwareのアップグレードを行ってください。

パッケージをどこから取得するかを/etc/slackpkg/mirrorsの該当箇所のコメントアウトを削除して選択します。


# cd /etc/slackpkg/mirrors
# vi mirrors

/etc/slackpkg/mirrors


#
#----------------------------------------------------------------
# Local CD/DVD drive
#----------------------------------------------------------------
# cdrom://media/cdrom/ <- CD/DVDから取得して更新する場合は、この行の#を消して有効にする
#
#----------------------------------------------------------------
# Local Directory
#----------------------------------------------------------------
# file://path/to/some/directory/ <- ローカルディスクから取得する場合は、この行の#を消して実際のパスを記述して有効にする
#
#----------------------------------------------------------------
# Slackware64-14.1
#----------------------------------------------------------------
# USE MIRRORS.SLACKWARE.COM (DO NOT USE FTP - ONLY HTTP FINDS A NEARBY MIRROR)
# http://mirrors.slackware.com/slackware/slackware64-14.1/
# AUSTRALIA (AU)
# ftp://ftp.cc.swin.edu.au/slackware/slackware64-14.1/
# http://ftp.cc.swin.edu.au/slackware/slackware64-14.1/
# ftp://ftp.iinet.net.au/pub/slackware/slackware64-14.1/
# http://ftp.iinet.net.au/pub/slackware/slackware64-14.1/
# ftp://mirror.aarnet.edu.au/pub/slackware/slackware64-14.1/
# http://mirror.aarnet.edu.au/pub/slackware/slackware64-14.1/

[画面省略]

# JAPAN (JP)  <- ネットワークから取得する場合は、このサーバの内、取得先を一つ選び、その行の#を消して有効にする
# ftp://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware64-current/
# http://ftp.nara.wide.ad.jp/pub/Linux/slackware/slackware64-current/
# ftp://ftp-srv2.kddilabs.jp/032/Linux/packages/Slackware/slackware64-current/
# http://ftp-srv2.kddilabs.jp/032/Linux/packages/Slackware/slackware64-current/
# ftp://riksun.riken.go.jp/Linux/slackware/slackware64-current/
# http://riksun.riken.go.jp/Linux/slackware/slackware64-current/

2015年11〜12月以降、日本のミラーが同期が取れていないので、私の方で管理者の皆さんに連絡しました。(2016/4/27)
KDDI研究所の方からはすぐにお返事を頂いて、修正して頂きました。
ですので、現状は、KDDI研究所のサーバをお勧めします。

KDDI研究所のミラーのURLが変更になっているので、以下のように変更して下さい。
(旧)http://ftp-srv2.kddilabs.jp/032/Linux/packages/Slackware/slackware64-current/
(新)http://ftp-srv2.kddilabs.jp/Linux/distributions/Slackware/slackware64-current/

パッケージ情報の更新

まずは、パッケージ情報を更新します。
パッケージの更新があったかどうかは、Slackwareの公式サイトのChange Logをチェックします。

パッケージの更新があった場合には、以下のコマンドでパッケージ情報を更新します。


# slackpkg update

[画面表示省略]

        Formatting lists to slackpkg style...
                Package List: using CHECKSUMS.md5 as source
                Package descriptions

一点、注意しておきたいのは、本家の方で更新されたパッケージがあったとしても、ミラーサイトに同期されるまでには、それなりに時間差があるという点です。
1〜2日あれば、殆どのミラーサイトの同期が終わっていると思います。
急ぎ、セキュリティの問題を修正したパッケージに更新したい場合は、アメリカの方のミラーサイトの方が早いです。
必要に応じて、ミラーサイトの選択は、柔軟に変更して運用すると良いです。

パッケージの更新

パッケージの更新には、upgrade-allのオプションを指定して使います。


# slackpkg upgrade-all

すると、コンソールに以下のような画面が表示されます。
更新するパッケージが選択されている事を確認して、スペースバーで「了解」を押します。

                             upgrade
Chose package to upgrade:
          [*] mozilla-firefox-45.1.0esr-x86_64-1.txz








                  <  解 >           < 取 消 >                

パッケージは、基本的に、全てインストールすることをお勧めします。

昔は、HDDの容量の関係もあって、必要なもの、推奨のものだけを入れるというのがお勧めでしたが、昨今はHDDの大容量化と共に価格も下がっていますし、SSDの価格も下がっています。
30GBもあれば、/homeのユーザ用の領域以外であれば、十分に足ります。
HDDやSSDの使用容量を節約するために、パッケージを取捨選択する必要はそれほど無いでしょう。

また、Slackwareのパッケージは、どんどん増える一方で、依存関係を追うのが困難になる一方です。
パッケージの依存関係を理解している中・上級者以外は、パッケージを全てインストールした方が無難です。

パッケージの追加

Slackwareでは、他のディストリビューション程ではないにせよ、それなりにパッケージの数が増えてきています。
新しいパッケージの追加には、install-newのオプションを指定して使います。


# slackpkg install-new

すると、コンソールに以下のような画面が表示されます。
新規に追加されたパッケージが表示・選択されている事を確認して、スペースバーで「了解」を押します。

                             install
Chose package to install:
          [*] mozilla-firefox-45.1.0esr-x86_64-1.txz








                  <  解 >           < 取 消 >                

パッケージの削除

Slackwareから除外されたパッケージの削除には、clean-systemのオプションを指定して使います。


# slackpkg clean-system

すると、コンソールに以下のような画面が表示されます。
公式で収録されているパッケージ以外が表示されます。
削除したいパッケージを選択して、スペースバーで「了解」を押します。

                             remove
Chose package to remove:
          [*] deb2tgz-0.1.1-noarch-1
          [*] dropbox-3.12.6-x86_64-1_SBo
          [*] exempi-2.3.0-x86_64-1
          [*] fbterm-1.7.0-x86_64-1
          [*] google-chrome-49.0.2623.110-x86_64-1
          [*] kasmi-2.5.0-x86_64-1
          [*] lua-5.3.2-x86_64-1
          [*] opera-36.0.2130.46-x86_64-1
          [*] otp-18.3-x86_64-1
          [*] pyxdg-0.25-x86_64-1
          [*] sublime_text-3.0.83-x86_64-1_SBo
          [*] swi-prolog-6.2.4-x86_64-1_SBo
          [*] sylpheed-3.5.0-x86_64-1
                                                               81%
                  <  解 >           < 取 消 >

自分で作成したパッケージや、SlackBuild.orgから作ったパッケージも削除の一覧に表示されます。
もしも、それらを表示させたくない場合には、/etc/slackpkg/blacklist を編集して、clean-systemで表示させたくないパッケージを設定します。

blacklistの最後の行をコメントアウトすると、SlackBuild.orgから作ったパッケージは表示されなくなります。


# You can blacklist using regular expressions.
#
# Don't use *full* regex here, because all of the following
# will be checked for the regex: series, name, version, arch,
# build and fullname.
#
# This one will blacklist all SBo packages:
#[0-9]+_SBo <- SlackBuild.orgのパッケージをslackpkgで扱わないようにするためには、この行の#を消して有効にする

日々の運用

コマンドの実行順序

日々の運用では、以下の通りに実行します。


# slackpkg update
# slackpkg upgrade-all
# slackpkg install-new
# slackpkg clean-system

カーネルのアップグレードがあった場合

カーネルのアップグレードがあった場合に、SlackwareをEFIブートでインストールした場合には、最後に以下のように表示されます。


Your kernel image was updated, and lilo does not appear to be used on
your system.  You may need to adjust your boot manager (like GRUB) to
boot the appropriate kernel (after generating an initrd if required).
Press the "Enter" key to continue...

カーネルのアップグレードがあった場合には、必ず、新しいvmlinuzを/boot/efi/EFI/Slackwareにコピーします。
eliloconfigのコマンドを実行する必要はありません。
カーネルのアップグレードは頻繁にあるので、これは覚えておきましょう。


$ ls -al /boot/efi/EFI/Slackware
total 17649
drwxr-xr-x 2 root root     1024 Apr  9 19:37 ./
drwxr-xr-x 3 root root     1024 Apr  9 19:37 ../
-rwxr-xr-x 1 root root      160 Apr 13 21:02 elilo.conf*
-rwxr-xr-x 1 root root   238531 Jun 12  2018 elilo.efi*
-rwxr-xr-x 1 root root 11302361 Apr 13 20:55 initrd.gz*
-rwxr-xr-x 1 root root  6527360 Apr 13 21:13 vmlinuz*

$su
パスワード:

# cp /boot/vmlinuz /boot/efi/EFI/Slackware/vmlinuz

何故、この作業だけで済むかというと、elilo.confが以下のようにシンプルな記載になっているからです。


chooser=simple
delay=1
timeout=1
#
image=vmlinuz
        label=vmlinuz
        initrd=initrd.gz
        read-only
        append="root=/dev/sda3 vga=normal ro"

設定ファイルが更新された場合

パッケージの更新によって設定ファイルも更新される場合があります。
その場合には、以下のような表示が最後に出ます。


Searching for NEW configuration files

Some packages had new configuration files installed.
You have four choices:

        (K)eep the old files and consider .new files later

        (O)verwrite all old files with the new ones. The
           old files will be stored with the suffix .orig

        (R)emove all .new files

        (P)rompt K, O, R selection for every single file

What do you want (K/O/R/P)?
K(eep)
古い設定ファイルを残して、新しい設定ファイルは.newの拡張子を付けて保存。自分で後でdiffなどを使って変更箇所を確認して吸収する。
O(verride)
新しい設定ファイルに上書きする。古い設定ファイルは.origの拡張子を付けて保存。自分で後でdiffなどを使って変更箇所を確認して吸収する
R(evmoe)
全ての.newファイルを削除する。
P(rompt)
全ての新しい設定ファイルをどうするかではなく、1つ1つについてK、O、Rのいずれかにするかを選ぶ

昨今の設定ファイルは、基本の設定ファイルは手を付けず、カスタマイズしたい部分だけ上書き・追記形式で別ファイルで持つというのが流儀なので、Oを選んで良いです。
但し、passwdやgroupsなどのユーザの登録情報に関連するファイルが更新される場合があります。
リブートする前にきちんと差分を確認して、Oを選んだら新しい設定ファイルに追記するとか、Kを選んだら新しい設定ファイルの追加分を追記するとか、差分を反映させておきましょう。