れんとう

まいにち なにか ひとつ

オレオレリポジトリとlftpコマンド

オレだよオレオレ!

実家にオレオレ詐欺の電話があったらしい。

  1. 風邪ひいてるから声がいつもと違う
  2. 電話は友達のを借りた
  3. 上司と喧嘩して会社辞めることになった
  4. とにかく至急お金が欲しい

とのたまわったとか。

ちなみに、両親は、3で本気にしたようだ!

俺のことどんなキャラだと思ってんだよ!

ローカルに作ったリポジトリ、名付けて、「オレオレリポジトリ

VM、PMを合わせると、ScientificLinuxで3台、OpenBSDは2台、Windowsは…4台。

さらに、RaspberryPiについても4枚転がっているわけで。

これらが一気にアップデートでネット接続すると、ネット回線が混雑するんだよね。

時間帯をずらしたりもしたんだけど、同じデータをDLするのにトラフィック発生ももったいないな、と思ったもので、ローカルにリポジトリを作ることにした。

というか、作った。

それを「オレオレリポジトリ」と名付けている。

かれこれ3年くらい、快適に使ってる。

「オレオレリポジトリの作り方」

WindowsのWSUSもローカルに作りたいのだが、今はフリーではないようだ。

なので、まずは、Linuxなどのリポジトリをローカルに作った。

yumコマンドやaptコマンドはネット上に公開されているリポジトリのhttpやftpサイトを見に行ってるわけだから、ローカルに同じ構造のものを作ってしまえばよい。

その後、各クライアントの参照先をローカルに向ける。

サーバの構築手順はこんな感じ。

なので、とても簡単。大きなサイズのディスクがあればよい。

クライアントについては、/etc/yum.repos.d 以下の$baseと$URLをローカルに構築した先に向けて、書き換えればO.K.。

 

lftpコマンドのスクリプトもこんな感じ。

下記は、ScientificLinux7.3をとある公開ミラーから丸ごとDLする場合の例。

 

!/bin/bash
lftp -e 'mirror --delete --only-newer /pub/Linux/scientific/7.3/ /var/www/html/local/scientificlinux/7.3/ && exit' http://www.hogehoge.jp

 

www.hogehoge.jp/pub/Linux/scientific/7.3をローカルの/var/www/html/local/scientificlinux7.3にダウンロードしてる。

lftpコマンドは、ローカルとサーバーのミラーに用いられる。

--only-newerの指定で、ローカルとサーバーの比較をして、更新されたものだけ落としてくれるので、トラフィックにも負荷をかけない。

--deleteの指定で、サーバーで削除されているファイルはローカルでも削除される。

 

で、だ、快適にすごいていたのに、ある日気がついた。

あれ?7.3のDLなんか止まってない?

ゾンビってる

cronでDLスクリプト実行の開始前と開始後に

date >> ~/cron-update.log

を挟んで、実行時間がどのくらいかかるか参考にしているのだが、ログファイルを見て、気がついた。あれ?アップデートスクリプト、完了してなくない?

psコマンドで確認すると、ゾンビってる。

あれ、なんでだろ?夜間に自動実行してるから、気がつかなかった。なんでだろ?

ということで、手動実行してみた。

 

# lftp -e 'mirror --delete --only-newer /pub/Linux/scientific/7.3/ /var/www/html/local/scientificlinux/7.3/ && exit' http://www.hogehoge.jp

cd 成功、cwd=/                                                

x86_64/release-notes: Getting files information (100%) [応答を待っています...

 

x86_64/release-notes というディレクトリのDLでどうやら引っかかっているようだ。

ブラウザで確認するとただのhtmlファイルなのでが、なぜか引っかかる。

逆に、ここはアップデートとはあまり関係ないところだ。

ちなみに、wgetコマンドで落とせたので、ここはwgetで対応すればいいや。

よし、x86_64/relese-notesを除けばいいのだな。でもどうやるんだろ?

 

-xオプションで解決だ!

man lftpしたら、マニュアル入ってなかったので、公式サイトを見に行ってみた。

LFTP - sophisticated file transfer program

PDF版のマニュアルゲット!

それを見ると、-xオプションについて書かれていた。

 

−x RX, −−exclude=RX exclude matching files

 

-xオプションでマッチングするファイルやディレクトリを除外できるようだ。

release-notesというフォルダは、他にないようなので、除外するようにスクリプトを直してみた。

 

#!/bin/bash
lftp -e 'mirror -x release-notes --delete --only-newer /pub/Linux/scientific/7.3/ /var/www/html/local/scientificlinux/7.3/ && exit' http://www.hogehoge.jp

 

実際に実行してみたら、うまくいった!

やったぜ!

 

rsyncとの違いは?

ローカルにオレオレリポジトリを作るときにrsyncコマンドも用いられることがあるようだ。どう違うのだろうとちょっとググってみた。

rsyncは、常時、サーバー間のファイルを比較して同期をとる用途のときにもちいるとよさそうだ。というかそういう用途向けらしい。

俺のオレオレリポジトリは、そこまで細かく同期をとるつもりもないので、週1くらいでDLすればいい。そういう時はlftpの方がいいみたい。

 

ということで、無事、オレオレリポジトリ、定期的に最新版に更新されるようになったよ!

WSUSも作っておきたいな。