DropboxをrpmでインストールしたFedora23の環境で、dnfコマンドを実行すると、以下のようなエラーが表示されました。
$ dnf check-update Failed to synchronize cache for repo 'Dropbox' from 'http://linux.dropbox.com/fedora/23/': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried, 無効化。
エラーメッセージで検索するとfedoraprojectのQAフォーラム がhitして、baseurlを書き換えろということでした。
直接の原因は https://linux.dropbox.com/fedora/23/repodata/repomd.xml が404 not foundで、https://linux.dropbox.com/fedora/22/repodata/repomd.xml が200 OK...というか、 https://linux.dropbox.com/fedora/23 ディレクトリがないというオチなので、いつかDropbox側がリポジトリ作ってくれれば解決、かなぁ・・・と。
放っといても実害はない(というか、自分じゃどうしようもない)けど生理的に嫌だし、FedoraのバージョンをアップグレードするたびにDropbox側が対応するのを毎回確認するのも嫌なので、Dropboxのリポジトリ監視スクリプトを書きました。
#!/bin/bash set -uex LANG=C LC_ALL=C RELEASEFILE=/etc/redhat-release NOWRELEASENUM=$(cat ${RELEASEFILE} | egrep -o . | egrep ^[0-9] | xargs | sed -e "s/[[:space:]]//g") OLDRELEASENUM=$(expr ${NOWRELEASENUM} - 1) NOWSITEURI=http://linux.dropbox.com/fedora/${NOWRELEASENUM}/ OLDSITEURI=http://linux.dropbox.com/fedora/${OLDRELEASENUM}/ REPOFILE=/etc/yum.repos.d/dropbox.repo NOWCURLSTAT=$(curl -LIs ${NOWSITEURI} -o /dev/null -w '%{http_code}\n') OLDCURLSTAT=$(curl -LIs ${OLDSITEURI} -o /dev/null -w '%{http_code}\n') echo ${NOWRELEASENUM} echo ${OLDRELEASENUM} if [ -f ${REPOFILE} ]; then # リポジトリファイルのオリジナルをバックアップする [ ! -f ${REPOFILE}.orig ] && sudo cp -p ${REPOFILE}{,.orig} # リポジトリファイルのbaseurl行に「$releasever」を含んでいるかどうかをチェックする GREPCHECK0=$(cat ${REPOFILE} | egrep ^baseurl | egrep '\$releasever' > /dev/null ; echo $?) # リポジトリファイルのbaseurl行に1つ手前のFedoraのバージョン番号を含んでいるかどうかをチェックする GREPCHECK1=$(cat ${REPOFILE} | egrep ^baseurl | egrep "/${OLDRELEASENUM}/" > /dev/null ; echo $?) # もしFedora最新バージョン向けURIが200じゃなく(条件1)、かつbaseurlの行に$releaseverを含んでおり(条件2)、 # さらに、1つ手前のFedoraのバージョン向けURIが200であれば(条件3)、 $releasever をFedoraの1つ手前のバージョン番号に置換する if [ ! 200 = ${NOWCURLSTAT} -a 0 = ${GREPCHECK0} -a 200 = ${OLDCURLSTAT} ] then sudo sed -i "/^baseurl/s/\$releasever/${OLDRELEASENUM}/" ${REPOFILE} fi # もしFedora最新バージョン向けURIが200であり(条件1)、かつbaseurlの行にFedoraの1つ手前のバージョン番号を含んでいれば(条件2)、 # バージョン番号を最新にする if [ ! 200 = ${NOWCURLSTAT} -a 0 = ${GREPCHECK1} ] then sudo sed -i "/^baseurl/s/${OLDRELEASENUM}/\$releasever/" ${REPOFILE} fi fi
あとは、cronでスクリプトを実行する際にsudoを使えるように設定した上でcron実行してあげれば、メンテナンスフリーになるはずです。
しかし、Fedoraのバージョン番号を抜き出すのに /etc/redhat-release を awk で抜き出さずに egrep -o と xargs で抜き出すあたりがシェル芸勉強会の影響を強く受けてますね。はい。
[amazonjs asin="4774179167" locale="JP" title="今すぐ使えるかんたんPLUS+ Dropbox & Google Drive & OneDrive & Evernote 完全大事典"]