ブログの説明

学校に通わないで学んだことを記しています。間違っているところが何かありましたらご指摘下さると幸いです。コメントに対する返信が遅れる可能性があります。その場合は申し訳ありません。

このブログではサイドバーに広告を表示しています。このブログ内の投稿記事を検索するには右上の拡大鏡のアイコンを、アーカイブやラベル付けから投稿記事を閲覧するには左上の三重線のアイコンをクリックして下さい。

数式の表示にはMathJaxを利用させていただいています。数式の表示のためにJavaScriptが有効である必要があります。そうでない場合、訳の分からないLatexのコードが表示されます。幾何学図形やチャートの表示にはHTML5 CanvasやGoogle Chartを使用しています。その表示のためにもJavaScriptが有効である必要があります。

Debian GNU/Linux 9でaptパッケージの自動更新

Debian GNU/Linux 9でaptパッケージの更新を自動的に行う方法には、unattended-upgradesを使う方法やcronというサービスを使う方法などがあるが、ここではまず最も簡単な方法の一つ、rc.localを使う手順を示す。

/etcディレクトリ内にrc.localという名のファイルを作ってその中に実行したいコマンドを並べれば、システムの起動後や再起動後に自動的にそれらを実行してくれるようになる。/etc/rc.localの内容は例えば次のように記述する。

#!/usr/bin/bash
apt update
apt upgrade -y
apt clean
exit 0

オプションの-yはyes/noの問いに対してすべてyesと応えることを示す。最後のexit 0は一連のコマンドがエラーなく正常に終了したことを示す終了コード0を親プロセスに返すものらしいが、必ず要るわけではなさそうだ。詳しいことは「終了ステータス」や「終了コード」で検索するといい。

テキスト・エディタを使わずにechoコマンドを使う場合は次のようにすればいいと思う。

# echo "#!/usr/bin/bash\napt update;apt upgrade -y;apt clean" >> /etc/rc.local

最後に、/etc/rc.localに実行権限を与えれば完了。

# chmod u+x /etc/rc.local

ただしここで示したのは、aptパッケージ管理システムを使っているディストリビューションの場合。他のパッケージ管理システムではそれ向きのコマンドを記述する必要がある。

Linuxディストリビューションによっては/etc/rc.d/rc.localの場合もある。あるいは、このファイルがすでに存在している場合もある。その場合には上記のコマンドをそのファイルに追加してやればいいと思う。

cronを使う方法

cronを使う場合、cronがインストールされていなければインストールする。

$ su
# apt update;apt install cron

/etc/cron.dディレクトリ内に設定ファイルを置けばいい。ファイルの所有権はもちろんrootで、実行権限は与えなくていい。適当なファイル名で新規にファイルを開いてその内容を例えば次のように記述する。ここでは/etc/cron.d/apt-upgradeというファイル名にした。

@reboot root apt update;apt upgrade -y;apt clean

@rebootはシステムの起動時や再起動時に実行することを示し、rootはroot権限で実行することを示し、その後の記述は実行したいコマンドを示す。これで完了。

echoコマンドを使って設定ファイルを作成する場合は次のようにすればいいと思う。

# echo "@reboot root apt update;apt upgrade -y;apt clean" > /etc/cron.d/apt-upgrade

Linuxを再起動してからroot権限で次のコマンドを実行し、エラーメッセージが表示されず、次のような行を確認することができればうまく行ったはず。

$ su
# systemctl status cron
● cron.service - Regular background program processing daemon
(中略)
 3月 27 12:39:03 mk CRON[578]: (root) CMD (apt update;apt upgrade-y;apt clean)

cronまたはanacronを使う別の方法として/etc/cron.dailyディレクトリ内に/etc/rc.localと同じ内容のシェル・スクリプトを作る手がある。echoコマンドを使ってそれを行うには次のようにする。

# echo "#!/usr/bin/bash\napt update;apt upgrade -y;apt clean;exit 0" > /etc/cron.daily/apt-upgrade.sh

そしてこのファイルに実行権限を与える。

# chmod u+x /etc/cron.daily/apt-upgrade.sh

unattended-upgradesを使う方法

最後の方法はDebian GNU/Linuxの公式サイトで説明されているもの。まずはunattended-upgradesというaptパッケージをインストールする。

$ su
# apt update
# apt install unattended-upgrades

インストールが無事に完了したら次のコマンドを実行する。

# dpkg-reconfigure -plow unattended-upgrades

すると、「自動的に安定版の更新をダウンロードしてインストールしますか?」と問うてくるので「はい」を選ぶ。/etc/apt/apt.conf.d/20auto-upgradesというファイルを開くと次の行が追加されているのが分かる。

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

シェルが「コマンドが見つかりません」と応答してくる場合、debconfというaptパッケージがインストールされていないか、/usr/sbinが環境変数のPATHにexportされていない可能性がある。debconfはunattended-upgradesパッケージをインストールすれば依存関係で一緒にインストールされているはず。環境変数PATHに/usr/sbinを追加するには、.bashrcなど、ログイン時に参照されるシェルの設定ファイルに次の行を加えればいい。

export PATH="$PATH:/usr/sbin"

ダウンロードされたファイルがキャッシュに貯まってゆくのを定期的に掃除する必要があるときは、先ほどの/etc/apt/apt.conf.d/20auto-upgradesというファイルに次のように3行めを加えておけばいい。

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";

これで7日ごとにapt cleanを自動的に実行してくれるはず。

apt autoremoveを自動的に実行させるには次のように4行めを加える。

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
Unattended-Upgrade::Remove-Unused-Dependencies "true";

試しに実行してみる。

# unattended-upgrade -d
Initial blacklist : 
Initial whitelist: 
自動アップグレードスクリプトを開始します
(省略)

コメント

このブログの人気の投稿

Visual Studio 2019にはC++のためのフォームデザイナーがない件

10の補数と9の補数と2の補数と1の補数

LATEXで数式:指数と順列などで使う添数・添字