パッケージ | Ubuntu
特記がない限り Ubuntu 22.04 LTS を前提とします。出力例には、他の版(20.04 など)のものが含まれます。その場合は版を明記しています。
- Ref
- 概要
- Ubuntu Packages Search
- 登録リポジトリを確認
- update / upgrade
- インストール済みパッケージを確認
- パッケージをインストール
- パッケージをアップグレード
- アップグレード可能なパッケージを確認
- パッケージを検索
- パッケージ詳細を表示
- パッケージをアンインストール
- PPA(Personal Package Archive)を追加・削除
- 自動アップグレード
- 用語
- 備考
- WordPress に必要な PHP モジュールパッケージをインストール
- ネットワーク関連パッケージ
- ESM Apps
Ref.
https://qiita.com/SUZUKI_Masaya/items/1fd9489e631c78e5b007
概要
Ubuntu(Debian)でアプリケーションをインストールする方法は、大きく 3 つに分けられます。
- リポジトリで管理されている .deb パッケージを、apt を使ってインストール
- .deb パッケージを、インストーラーや
dpkg -iでインストール - それ以外(ソースコードを
makeなどでインストール)
.deb パッケージを apt install や dpkg でインストールすると、dpkg のデータベースに登録されます。特に apt でインストールしたものは、apt upgrade などで依存関係を解決しながらアップグレードできます。
インストーラーや dpkg -i でインストールした .deb パッケージも、apt remove で削除できます。
また多くの場合、apt でインストールしたバイナリは /usr/bin に配置されます。make などでインストールしたバイナリは、手動で /usr/local/bin に配置します。インストーラーや dpkg -i でインストールしたパッケージは、作者の意図で /usr/bin、/usr/local/bin のどちらかに配置されます。
Ubuntu Packages Search
登録リポジトリを確認
22.04 まで:
$ cat /etc/apt/sources.list
24.04 以降は、既定のリポジトリが /etc/apt/sources.list.d/ubuntu.sources(DEB822 形式)に定義されています。
$ cat /etc/apt/sources.list.d/ubuntu.sources
版によらず、有効なリポジトリは次で確認できます。
$ apt policy
$ ls /etc/apt/sources.list.d/
重要なポイント:Ubuntu は、正式リリース後は、ソフトウェア自体のバージョンが変わるような更新を、いくつかの例外を除いて提供しません。脆弱性や不具合は、必要な修正だけを現行バージョンに取り込む(backport)形で、パッケージのリビジョン(例: 1.2-1ubuntu1 → 1.2-1ubuntu1.1)を上げて提供されます。詳しくは セキュリティアップデート を参照してください。
ref. https://gihyo.jp/admin/serial/01/ubuntu-recipe/0312
update / upgrade
apt update:リポジトリから、パッケージの一覧(更新可能なパッケージの情報)を取得apt upgrade:インストール済みのパッケージをアップグレード
apt update は、パッケージ自体の更新はしないことに注意してください。
$ sudo apt update && sudo apt upgrade -y
インストール済みパッケージを確認
$ apt list --installed
- https://news.mynavi.jp/article/20190222-775519/
- Ubuntu でインストール可能なバージョン一覧を表示する方法
パッケージをインストール
$ sudo apt install
- Ubuntu – Ubuntu パッケージ検索 で対象パッケージを検索
sudo apt install
例)PHP
$ sudo apt install php
php パッケージのバージョンは、Ubuntu の版で決まります(20.04 は 7.4、22.04 は 8.1、24.04 は 8.3)。
以下は 20.04(focal) での例です。
$ apt list --installed | grep php
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libapache2-mod-php7.4/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php-common/focal,now 2:75 all [installed,automatic]
php7.4-cli/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-common/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-json/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-opcache/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4-readline/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 amd64 [installed,automatic]
php7.4/focal-updates,focal-security,now 7.4.3-4ubuntu2.4 all [installed,automatic]
php/focal,now 2:7.4+75 all [installed]
WARNING: apt does not have a stable CLI interface. Use with caution in scripts. を表示したくない場合:
$ apt list --installed 2>/dev/null | grep php
パッケージをアップグレード
特定のパッケージだけをアップグレードする手順:
sudo apt updateapt list --upgradable | grepsudo apt install --only-upgrade
[!NOTE]
apt upgradeは、インストール済みのすべてのパッケージを更新するコマンドです。特定のパッケージ名を指定する用途のコマンドではなく、apt upgrade nginxと書いても期待どおりには動作しません。- 特定のパッケージだけを更新するには、
apt install --only-upgrade <package>を使います。未インストールの場合は、新規にインストールせずスキップします。apt install <package>でも、インストール済みなら更新されますが、未インストールの場合は新規インストールになります。
アップグレード可能なパッケージを確認
$ sudo apt update
# アップグレード可能なすべてのパッケージを表示
$ apt list --upgradable
# セキュリティアップデートのみ確認
$ apt list --upgradable 2>/dev/null | grep security
# 特定パッケージを指定して確認(シミュレーション)
$ apt install -s
パッケージを検索
# パッケージ名で検索(ワイルドカード指定可)
$ apt list {パッケージ名}
# パッケージ名と説明文から検索(部分一致)
$ apt search {パッケージ名}
参考: apt コマンドでパッケージ管理
$ apt --help
...
search - search in package descriptions
...
パッケージ詳細を表示
インストール済みでないパッケージでも、詳細を表示できます。
$ apt show
パッケージをアンインストール
ref. https://askubuntu.com/questions/187888/what-is-the-correct-way-to-completely-remove-an-application
例)MySQL 5.7 をアンインストール
[!WARNING]
purgeは設定ファイルを削除します。MySQL のデータディレクトリ(/var/lib/mysql)が削除される場合もあります。必ず事前にバックアップ(mysqldumpなど)を取ってください。
- MySQL 5.7 関連のパッケージを抽出
- 抽出したパッケージを削除
1. MySQL 5.7 関連のパッケージを抽出
以下は、MySQL 公式の APT リポジトリ(mysql-apt-config)で 5.7 を入れていた環境の例です。
$ apt list --installed | grep mysql
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
mysql-apt-config/now 0.8.12-1 all [installed,upgradable to: 0.8.24-1]
mysql-client/unknown,now 5.7.42-1ubuntu18.04 amd64 [installed,upgradable to: 8.0.35-0ubuntu0.22.04.1]
mysql-common/jammy,now 5.8+1.0.8 all [installed,automatic]
mysql-community-client/unknown,now 5.7.42-1ubuntu18.04 amd64 [installed,automatic]
mysql-community-server/unknown,now 5.7.42-1ubuntu18.04 amd64 [installed]
mysql-server/unknown,now 5.7.42-1ubuntu18.04 amd64 [installed,upgradable to: 8.0.35-0ubuntu0.22.04.1]
2. 抽出したパッケージを削除
$ sudo apt purge \
mysql-apt-config mysql-client mysql-common \
mysql-community-client mysql-community-server mysql-server
$ sudo apt autoremove
上記で MySQL 5.7 をアンインストールしたので、MySQL 8 を入れ直せます。
PPA(Personal Package Archive)を追加・削除
Ubuntu では、APT リポジトリの情報は下記のように登録されます。
/etc/apt/sources.listファイルに記述する/etc/apt/sources.list.d/ディレクトリ内に、リポジトリごとに別ファイルとして格納する
ref. https://hibiki-press.tech/dev-env/ubuntu/add-ppa/4640
[!WARNING] PPA は個人・団体が提供するサードパーティのリポジトリです。Ubuntu の公式リポジトリとは別に、提供元を信頼できるかを確認してから追加してください。Ubuntu のセキュリティチームによるサポート対象外です。
PPA リポジトリを追加
例) ppa:ondrej/php を追加します。add-apt-repository を使います。
$ sudo apt install -y software-properties-common
$ sudo LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
$ sudo apt update
22.04 では、/etc/apt/sources.list.d/ondrej-ubuntu-php-jammy.list が作成されます。24.04 以降では、.sources 形式のファイルが作成される場合があります。
# ondrej-ubuntu-php-jammy.list
deb https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main
# deb-src https://ppa.launchpadcontent.net/ondrej/php/ubuntu/ jammy main
PPA リポジトリを削除
準備
PPA から入れたパッケージを、先に確認して削除します。
$ apt list --installed 2>/dev/null | grep ppa.launchpadcontent
# PPA から入れた PHP 関連パッケージの例
$ sudo apt purge php8.3 php8.3-cli php8.3-common
$ sudo apt autoremove
(PPA のパッケージを、Ubuntu 標準のバージョンに戻す場合は、ppa-purge も使えます。)
PPA リポジトリを削除
$ sudo LC_ALL=C.UTF-8 add-apt-repository -y --remove ppa:ondrej/php
$ sudo apt update
自動アップグレード(Unattended Upgrades)
自動アップグレード関連コマンド・設定ファイル
自動アップグレードの関連コマンド・ファイルは、以下のとおりです1。
unattended-upgrades:無人アップグレードのコマンド/etc/apt/apt.conf.d/20auto-upgrades:無人アップグレードを実行するかどうかを指定/etc/apt/apt.conf.d/50unattended-upgrades:無人アップグレードの対象パッケージを指定apt-daily.timer:apt updateをいつ行うかを指定apt-daily-upgrade.timer:無人アップグレードをいつ行うかを指定
unattended-upgrades をインストール
unattended-upgradesは、Ubuntu Server では通常、初期状態でインストールされています(最小構成のイメージや Docker では入っていないことがあります)- インストールを確認する:
apt list --installed 2>/dev/null | grep unattended-upgrades - インストールされていない場合は、
sudo apt install unattended-upgradesでインストール
20auto-upgrades、50unattended-upgrades を作成
unattended-upgrades をインストールしただけでは、/etc/apt/apt.conf.d/20auto-upgrades が作成されない場合があります。その場合は、以下のコマンドで作成します。
$ sudo dpkg-reconfigure -plow unattended-upgrades
自動アップグレード関連ファイルを確認
以下は 20.04 での例です。
$ ls -l /etc/apt/apt.conf.d/
...
-rw-r--r-- 1 root root 129 May 14 2021 10periodic <== 現在では使用しないのが一般的
...
-rw-r--r-- 1 root root 80 Feb 17 2020 20auto-upgrades
...
-rw-r--r-- 1 root root 3800 Feb 17 2020 50unattended-upgrades
...
20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Update-Package-Lists が 1 の場合は、パッケージの一覧を自動で更新します。Unattended-Upgrade が 1 の場合は、自動でパッケージのアップグレードを行います。値を 0 にすると無効になります。パッケージの更新のログは /var/log/apt/history.log で確認できます。
ref. https://qiita.com/Brutus/items/b264384361d08b7475f6
50unattended-upgrades
50unattended-upgrades で、アップデートの対象(セキュリティ更新のみか、他のパッケージも対象にするか)や、更新後の再起動などを設定します。Ubuntu の既定では、セキュリティ更新(と、契約している場合は ESM)が対象です。
自動アップグレードの dry run / デバッグ実行
$ sudo unattended-upgrades --dry-run --debug
# -d, --debug print debug messages
# --dry-run Simulation, download but do not install
自動実行の時間設定
ref. https://hirose31.hatenablog.jp/entry/2020/02/19/165738
apt の自動アップデート・アップグレードは、systemd の timer を使います。
ref. Systemd
/lib/systemd/system/apt-daily.timer:apt updateをいつ行うかを指定/lib/systemd/system/apt-daily-upgrade.timer:無人アップグレードをいつ行うかを指定
systemd の timer は、以下で確認できます(22.04 の例)。
$ systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2022-12-30 03:41:01 UTC 40min left n/a n/a ua-timer.timer ua-timer.service
Fri 2022-12-30 06:33:33 UTC 3h 32min left n/a n/a apt-daily-upgrade.timer apt-daily-upgrade.service
Fri 2022-12-30 08:32:38 UTC 5h 32min left n/a n/a motd-news.timer motd-news.service
Fri 2022-12-30 12:12:08 UTC 9h left n/a n/a apt-daily.timer apt-daily.service
Sat 2022-12-31 02:57:54 UTC 23h left Fri 2022-12-30 02:57:54 UTC 2min 42s ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2023-01-02 00:00:00 UTC 2 days left n/a n/a fstrim.timer fstrim.service
6 timers listed.
ref. https://gamingpc.one/dev/systemd-timer-cheat/
apt-daily.timer、apt-daily-upgrade.timer の内容は、以下で確認します。
# apt-daily.timer の例
$ systemctl cat apt-daily.timer
# /lib/systemd/system/apt-daily.timer
[Unit]
Description=Daily apt download activities
[Timer]
OnCalendar=*-*-* 6,18:00
RandomizedDelaySec=12h
Persistent=true
[Install]
WantedBy=timers.target
# apt-daily-upgrade.timer
$ systemctl cat apt-daily-upgrade.timer
# /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true
[Install]
WantedBy=timers.target
ref. https://hirose31.hatenablog.jp/entry/2020/02/19/165738
[!IMPORTANT] 上記の
OnCalendarは 6:00 と 18:00(upgrade は 6:00)ですが、RandomizedDelaySecがあるため、実際の実行時刻はその時刻から、apt-daily.timerは最大 12 時間、apt-daily-upgrade.timerは最大 60 分遅れます。systemctl list-timersの NEXT 列が、実際の次回実行時刻です。
実行時刻を変更するには、/lib/systemd/system/ のファイルを直接編集せず、drop-in を使います。
$ sudo systemctl edit apt-daily-upgrade.timer
[Timer]
# 既定値をいったんクリアしてから指定する
OnCalendar=
OnCalendar=*-*-* 03:00
RandomizedDelaySec=0
実行
$ sudo unattended-upgrades --debug
# -d, --debug print debug messages
ref. https://hirose31.hatenablog.jp/entry/2020/02/19/165738
自動アップグレードのログ
$ less /var/log/apt/history.log
$ less /var/log/unattended-upgrades/unattended-upgrades.log
Ref.
apt dump
apt の設定を確認します。
$ apt-config dump
用語
deb
deb(ディーイービー)は、Debian などで利用されるソフトウェアパッケージのフォーマットです。
拡張子 .deb のファイルは、Debian、Ubuntu など多くの Linux ディストリビューションで利用されるバイナリパッケージです。gzip、bzip2、LZMA などで圧縮された 2 つのアーカイブ(コントロール情報とデータ)で構成され、dpkg、apt、aptitude で管理できます。
ref. https://ja.wikipedia.org/wiki/Deb_(%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)
PPA
PPA:Personal Package Archive
ref. https://kazuhira-r.hatenablog.com/entry/2019/03/10/225459
備考
WordPress に必要なパッケージをインストール
インストール済みの PHP 拡張モジュール(extension)を調べます。
$ php -m
calendar
Core
ctype
date
exif
FFI
fileinfo
filter
ftp
gettext
hash
iconv
json
libxml
openssl
pcntl
pcre
PDO
Phar
posix
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
Zend OPcache
zlib
[Zend Modules]
Zend OPcache
WordPress に必要なモジュールは、以下を参照してください。
https://make.wordpress.org/hosting/handbook/server-environment/#php-extensions
足りないモジュールをインストールします。
- curl
- dom(
php-xmlに含まれる) - mbstring
- mysqli(
php-mysqlに含まれる) - imagick
- xml
- zip
PHP のバージョンを指定しない、版に依存しない書き方(22.04 なら 8.1 が入る):
$ sudo apt install php-curl php-mbstring php-mysql php-imagick php-xml php-zip
バージョンを指定する場合(例: 8.1):
$ sudo apt install php8.1-curl php8.1-mbstring php8.1-mysql php8.1-imagick php8.1-xml php8.1-zip
ネットワーク関連パッケージ
ip コマンドをインストール。
$ sudo apt install iproute2
ifconfig、route をインストール(非推奨の古いコマンドです。ip を使ってください)。
$ sudo apt install net-tools
ping をインストール。
$ sudo apt install iputils-ping
dig、nslookup をインストール。
$ sudo apt install dnsutils
traceroute をインストール。
$ sudo apt install traceroute
# または
$ sudo apt install inetutils-traceroute
ESM Apps
ESM Apps は、Ubuntu Pro に登録すると利用できます(個人利用は 5 台まで無料)。Universe リポジトリのパッケージのセキュリティ更新も対象になります。
12 additional security updates can be applied with ESM Apps.
Learn more about enabling ESM Apps service at https://ubuntu.com/esm
$ pro status # 状態を確認
$ sudo pro attach <token> # Ubuntu Pro に登録
(旧称の ua コマンド、ua-timer は Ubuntu Advantage の名残です。)
-
/etc/apt/apt.conf.d/10periodicを使う方法は古い方法です。 ↩