🤯
Oracle Cloud InfrastructureでE2.1.Microのdnfがハングアップする
要約
- Oracle Cloud InfrastructureのFree TierでセットアップされるE2.1.MicroをAlmaLinux9で動かすと高確率でアプデ不良を起こす。
- 原因として、Oracle Linuxインスタンスでは多くのリポジトリがプリインストールされるが、バージョンアップを忘れているスペックが低いインスタンスでは、リポジトリの処理で詰まる事がある。swapとmicrodnfを使用することでこれを解決できる。
- 解決後は最新のリポジトリキャッシュ(依存関係のキャッシュ)とインストール状態となるので、こまめにアップデートすれば起きなくなる(と思いたい)
何がアプデ不良なのか?
今回は以下の問題により、AlmaLinux9がアプデ出来ないことを解決する。
唐突な「Killed」
[root@oci ~]# dnf update -y -v
Failed to set locale, defaulting to C.UTF-8
Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download, genera
te_completion_cache, groups-manager, needs-restarting, playground, repoclosure, repodiff, repograph,
repomanage, reposync, system-upgrade, ulninfo
DNF version: 4.7.0
cachedir: /var/cache/dnf
User-Agent: constructed: 'libdnf (Oracle Linux Server 8.10; server; Linux.x86_64)'
Ksplice for Oracle Linux 8 (x86_64) 118 kB/s | 3.5 kB 00:00
reviving: 'ol8_ksplice' can be revived - repomd matches.
ol8_ksplice: using metadata from Fri Aug 30 11:03:21 2024.
MySQL 8.0 for Oracle Linux 8 (x86_64) 141 kB/s | 3.5 kB 00:00
reviving: 'ol8_MySQL80' can be revived - repomd matches.
ol8_MySQL80: using metadata from Wed Aug 14 11:52:34 2024.
MySQL 8.0 Tools Community for Oracle Linux 8 (x86_64) 149 kB/s | 3.5 kB 00:00
reviving: 'ol8_MySQL80_tools_community' can be revived - repomd matches.
ol8_MySQL80_tools_community: using metadata from Wed Aug 14 11:52:38 2024.
MySQL 8.0 Connectors Community for Oracle Linux 8 (x86_64) 55 kB/s | 3.5 kB 00:00
reviving: 'ol8_MySQL80_connectors_community' can be revived - repomd matches.
ol8_MySQL80_connectors_community: using metadata from Fri Jul 5 15:55:26 2024.
Oracle Software for OCI users on Oracle Linux 8 (x86_64) 131 kB/s | 2.9 kB 00:00
reviving: 'ol8_oci_included' can be revived - repomd matches.
Killed
何をすればアプデできるのか?
とりあえず、tmuxを使えるようにする
とにかくこの手の作業はtmuxでほったらかしできるようにしないと、人生の無駄である。
mkdir /etc/yum.repos.d/a
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/a
mv /etc/yum.repos.d/a/oracle-linux-ol8.repo /etc/yum.repos.d/
dnf update -y
dnf install -y tmux
最低限のリポジトリに絞ってとりあえずdnf updateが動くようにする
mv /etc/yum.repos.d/a/*.repo /etc/yum.repos.d/
dnf config-manager --disable ol8_developer_EPEL
dnf config-manager --disable ol8_developer_EPEL_modular
dnf config-manager --disable ol8_ksplice
dnf config-manager --disable ol8_MySQL80
dnf config-manager --disable ol8_MySQL80_tools
dnf config-manager --disable ol8_MySQL80_connectors_community
dnf config-manager --disable ol8_oci_included
tmux
dnf update -y -v
なんとかしてmicrodnfをインストールする
dnf install -y -v microdnf
microdnf update -y
microdnfがインストールできたらリポジトリ設定を元に戻す
dnf config-manager --enable ol8_developer_EPEL
dnf config-manager --enable ol8_developer_EPEL_modular
dnf config-manager --enable ol8_ksplice
dnf config-manager --enable ol8_MySQL80
dnf config-manager --enable ol8_MySQL80_tools
dnf config-manager --enable ol8_MySQL80_connectors_community
dnf config-manager --enable ol8_oci_included
tmux
microdnf update -y
それでも「Killed」となる場合はSwapを拡大する
swapoff /.swapfile
dd if=/dev/zero of=/.swapfile bs=1M count=4096
mkswap /.swapfile
chmod 600 /.swapfile
swapon /.swapfile
Discussion