1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

最近の、"apt upgrade"での"保留"に対するシェルスクリプト

Last updated at Posted at 2023-04-05

経緯

最近、apt upgrade界隈で、保留になることが多いんですよね。すでにTwitterで多く話題になっているところです。

ツイッターでの ("apt") AND ("upgrade") AND ("保留") の検索はこちら

↓こうなるんですよね、

パッケージリストを読み込んでいます...
依存関係ツリーを作成しています...
状態情報を読み取っています...
アップグレードパッケージを検出しています...
Get more security updates through Ubuntu Pro with 'esm-apps' enabled:
  libpostproc55 libavcodec58 libavutil56 libswscale5 libswresample3
  libavformat58
Learn more about Ubuntu Pro at https://ubuntu.com/pro
以下のパッケージは保留されます:
  alsa-ucm-conf distro-info-data gnome-settings-daemon
  gnome-settings-daemon-common
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。

ちょっとUbuntu Pro界隈のコメントがうるさいですが、問題となるのは、↓の部分です。

以下のパッケージは保留されます:
  alsa-ucm-conf distro-info-data gnome-settings-daemon
  gnome-settings-daemon-common
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。

解決策としてはこの保留されたのをコピペして、

sudo apt install alsa-ucm-conf distro-info-data gnome-settings-daemon gnome-settings-daemon-common

とするだけなんですが、GUIじゃないUbuntu-Serverとかの場合、どうしているんでしょうか?

考えただけで面倒ですよね。

作成したシェルスクリプトとその解説

ってことで対応するシェルスクリプトを作ってみました。(変数名とかショボいんは許してください。)

それがこちら。

なお急ぎ足で作ったんで、保留が出ない場合=正常な場合には対応してません(エラー吐きまくります)。

この辺りは各自がリスクを判断した上で使ってください。

upgradeDame.sh

#!/bin/bash

touch upgradeDame.txt
sudo apt update
sudo apt upgrade > upgradeDame.txt

START=$( grep -ne '以下のパッケージは保留されます:' upgradeDame.txt |  sed -e 's/:.*//g' )
GOAL=$( grep -ne 'アップグレード:' upgradeDame.txt |  sed -e 's/:.*//g' )

START=$(($START + 1))
GOAL=$(($GOAL - 1))

INSCO=$( awk "NR==$START,NR==$GOAL {print}" upgradeDame.txt )

sudo apt install $INSCO

Renshu/bin at main · YohYasushi/Renshu · GitHubにも公開しております。

一つ一つ説明していきます。

まず、upgradeDame.shが存在する階層に移動しているものとして説明をすすめていきます。
/home/yohyasushiに置いていることを想定しています。

touch upgradeDame.txt
sudo apt update
sudo apt upgrade > upgradeDame.txt

upgradeDame.txtを作成し、sudo apt upgradeの結果を渡しています。
ここで、

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

というエラーが出ますが、無視していいです。

なお敢えてtxtで出力している理由は、あとから検証するためです。今回のupgradeDame.shですが、盲目的にすべてinstallする仕様なので、あとから何をインストールしたか検証できるようにあえてtxtを作りました。

それなりの危険を伴うシェルスクリプトなのも理解して使ってくださいね。

では、説明を続けていきます。

要するにコピペしたいのは↓の、

以下のパッケージは保留されます:
  alsa-ucm-conf distro-info-data gnome-settings-daemon
  gnome-settings-daemon-common
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。

*以下のパッケージは保留されます: *と、 *アップグレード: *の間の文字列なのでそこの辺りの行番号をとってくるために、

START=$( grep -ne '以下のパッケージは保留されます:' upgradeDame.txt |  sed -e 's/:.*//g' )
GOAL=$( grep -ne 'アップグレード:' upgradeDame.txt |  sed -e 's/:.*//g' )

としています。変数の、$START$GOALってますね。

でほしいのは

START=$(($START + 1))
GOAL=$(($GOAL - 1))

ですね。わかりますよね。

最後に、

INSCO=$( awk "NR==$START,NR==$GOAL {print}" upgradeDame.txt )

sudo apt install $INSCO

変数$INSCOに、必要な部分の文字列をコピペしてから、apt installに渡しています。

最後に、upgradeDame.txtの中身を確認してみましょう。

パッケージリストを読み込んでいます...
依存関係ツリーを作成しています...
状態情報を読み取っています...
アップグレードパッケージを検出しています...
Get more security updates through Ubuntu Pro with 'esm-apps' enabled:
  libpostproc55 libavcodec58 libavutil56 libswscale5 libswresample3
  libavformat58
Learn more about Ubuntu Pro at https://ubuntu.com/pro
以下のパッケージは保留されます:
  alsa-ucm-conf distro-info-data gnome-settings-daemon
  gnome-settings-daemon-common
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 4 個。

こうしてあとから検証できる必要性がありますね。

まとめ

シェルスクリプト初心者の私には、けっこう苦労した作品です。有志の方々がこれをたたき台にして、もっといいものを作ってくれることも期待しております。

再度いいますが、選択的にインストールしたりは出来ないので、この点はよくよくご理解をください。では。

関連するリンク

Renshu/bin at main · YohYasushi/Renshu · GitHub

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?