🤯

Oracle Cloud InfrastructureでE2.1.Microのdnfがハングアップする

2024/08/31に公開

要約

  • 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