利用者:Crontab でパッケージを更新
関連記事
目次
手順
- まずは cron をインストールしてください。
- pacman が失敗したときに通知を送れるように Postfix などのメール転送エージェントをインストールすることを推奨します。
- root で実行:
crontab -e
- crontab に以下を貼り付けてください:
MAILTO=your@email LOGFILE=/var/log/cron-pacman.log # 1. minute (0-59) # | 2. hour (0-23) # | | 3. day of month (1-31) # | | | 4. month (1-12) # | | | | 5. day of week (0-7: 0 or 7 is Sun, or use names) # | | | | | 6. commandline # | | | | | | #min hr dom mon dow command 00 13 * * * . /etc/profile && (echo; date; pacman -Syuq --noconfirm) &>>$LOGFILE || (echo 'pacman failed!'; tail $LOGFILE; false)
値は自由に設定してください。例えば min を */2
とすることで2分毎にアップデートをチェックすることができます。
アップグレードが成功したときに自動でコンピュータを再起動させたい場合、上記の行の末尾に '&& reboot' を追加してください。
自動アップデートの手動設定
ホームユーザーのために Arch Linux をセットアップして常にシステムを最新状態にしたい場合、バックグラウンドで実行するようにする必要があります。
アップデートのダウンロード
標準出力にアップデートのリストを出力するスクリプトを作成:
ShortListUpdates.sh
#!/bin/bash pacman -Qq | \ grep -e smplayer \ -e smtube \ -e ^jre \ -e ^gst \ -e firefox | \ grep -v -e 'to_ignore_package1' -e 'to_ignore_package2' -e 'to_ignore_package3' #Files from a group to add pacman -Qqg kde | grep -v -e 'to_ignore_package1' -e 'to_ignore_package2' -e 'to_ignore_package3'
- ダウンロードするべきものが存在するか確認する:
if [ ! -f /tmp/.downloaded_yes ];then echo Is OK to download;else echo Already downloaded;fi
- コンピュータがアイドル状態か確認する。xprintidle ユーティリティ (X) あるいは
w
コマンド (tty) を使う。 - コンピュータが電源に接続されていて十分なバッテリー残量があることを確認。upower をインストールする必要があります。
#!/bin/bash MAXpower="60" ST=($(upower -i "$(upower -e | grep 'BAT')" | grep -e "state" -e percentage | awk '{print $2}' | sed 's/%//g')) if [ ! -z ${ST[0]} ];then if [ ${ST[1]} -gt ${MAXpower} ] || [ ${ST[0]} == 'charging' ] || [ ${ST[0]} == 'fully-charged' ]; then echo "OK" else echo "Fail" fi else echo "OK" fi
- コンピュータが 3G あるいは PPP 接続を使っている場合、巨大なデータをダウンロードしないように接続タイプをチェック:
ifconfig | grep ^ppp -c
。 - オンラインかどうか確認:
ping -c 1 8.8.8.8 ; if [ "${?}" != "0" ]; then echo bad; else echo good; fi
。ファイアウォールによって ping リクエストがブロックされている場合ifconfig | grep -v 'lo:' | grep RUNNING -c
を使う。またはファイルのダウンロードを試行してエラーが発生しないか確認。 - 重要なアップデートのリストを作成。
- ダウンロードが完了した後にアップデートチェックが繰り返されることを防ぐ:
echo downloaded > /tmp/.downloaded_yes
。
リストからアップデートをダウンロード・インストール
リストからアップデートをダウンロードするには pacman -Sw --noconfirm --needed $(/full/path/to/ShortListUpdates.sh)
を使います。
............... ............... yes | pacman -S --noconfirm --needed $(/full/path/to/ShortListUpdates.sh) systemctl daemon-reload sleep 2 ............... ...............
sleep
タイムアウトが小さすぎると画面がフリーズする可能性があるので注意してください。
#!/bin/bash sleep 5 if [ "$(pgrep X -c)" != "0" ]; then export DISPLAY=:0 else export DISPLAY=:0 startx "$0" fi ......... ......... .........
crontab
を使って起動時にリストからのアップデートを予定することができます:
@reboot /usr/local/bin/update
夜間にダウンロード・インストール
夜間もコンピュータの電源を入れっぱなしにする場合、以下のようにコンピュータが待機状態になったときにダウンロード・インストールを開始できます。
.............. ..............# Battery and connection safety checks .............. yes | pacman -S --needed $(pacman -Ssq openjdk | grep -v -e doc -e src) if [ $(ifconfig | grep ^ppp -c) != "0" ];then pacman -Suw --noconfirm else pacman -Qq --native | pacman -Sw --needed - fi yes | pacman -Su if [ "${?}" != "0" ];then beep -f 100 -l 1000 && zenity --warning --text="Ett problem har uppstått. Kontakta Admin!" if [ -f "/var/lib/pacman/db.lck" ];then zenity --warning --text="Databasfilen är skadat eller används: /var/lib/pacman/db.lck";fi; exit 1 else BkupDate=$(date '+%A-day_of_the_week-%u') pacman -Q --native > /opt/.alt_db_bkup-"${BkupDate}" date >> /opt/.alt_db_bkup-"${BkupDate}" systemctl daemon-reload sleep 2 fi pacman-db-upgrade .............. .............. ..............
コンピュータが有線・無線接続されている場合、無視リストに存在するパッケージもダウンロードされます。また、アップデートをダウンロードしてから次の日にインストールさせることもできます。
AUR からパッケージをアップデート
まず GPG 鍵を作成して makepkg
の設定ファイルに追加してください:
/etc/makepkg.conf
............... PKGDEST=/path/to/custom_repo GPGKEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ...............
AUR のパッケージを最新状態に保つことは難しいですが、以下のような方法があります:
- AUR からファイルをダウンロードするスクリプトを作成する。あるいは AUR ヘルパーを使用する。ただしパッケージが公式リポジトリに移動された場合はインストールしたパッケージが更新されないので、チェックが必要です。
- バイナリをダウンロード・展開してパッケージをアップデートする。ただしパッケージのバージョンは pacman データベースに登録されません。
- 仮想環境に複製してアップデートを監視し、テストすることで問題が起こったときに解決策を練ることができます。
mirrorlist ファイルのアップデート
月に数回の頻度でミラーのアップデートを定期的に行うようにすることができます。Reflector を見てください。