システム運用時にソフトウェアアップデート等の目的でUSBメモリ挿入時に自動的にファイルを更新したい場合があるかと思います。ここではUSBメモリを挿入した時に、自動的にUSBメモリからファイルをArmadilloにコピーする方法を紹介します。
1. USBメモリ挿入時にスクリプトを実行するように修正
以下のURLのブログを参考に、USBメモリが挿入されると/etc/udev/device-connect-test.shが実行されるように修正してください。
2. スクリプトを修正
/etc/udev/device-connect-test.shを以下のように修正し、USBメモリ内部のスクリプトを実行するように修正してください。
#!/bin/bash
PARTITION="/dev/sda1"
FTYPE="vfat"
MOUNTDIR=/mnt
EXECFILE="autoexec"
logger "device-connect-test.sh: start script."
if [ ! -e $PARTITION ]; then
logger "device-connect-test.sh: $PARTITION is not found."
exit 1
fi
mount -t $FTYPE $PARTITION $MOUNTDIR
if [ $? -ne 0 ]; then
logger "device-connect-test.sh: mount error."
umount $MOUNTDIR 2> /dev/null
exit 1
fi
if [ -x "$MOUNTDIR/$EXECFILE" ]; then
logger "device-connect-test.sh: execute $MOUNTDIR/$EXECFILE."
$MOUNTDIR/$EXECFILE
fi
umount $MOUNTDIR 2> /dev/null
exit 0
※: このスクリプトはUSBメモリがFAT32でフォーマットされていることを前提としています。もし異なる場合は、スクリプトを修正してください。
3. USBメモリの準備
ファイルをコピーするためにUSBメモリの準備を行います。
USBメモリにautoexecというファイル名、文字コードUTF-8、改行コードLFで、以下の内容のファイルを作成してください。
#!/bin/sh
cd `dirname $0`
cp temp.txt /root/
USBメモリにtemp.txtというファイル名で、以下の内容のファイルを作成してください。
file copy test.
4. USBメモリの挿入
ArmadilloにUSBメモリを挿入してください。
USBメモリが挿入されるとスクリプトが実行され、以下のようにtmp.txtが/rootディレクトリにコピ―されていることが確認できます。
[armadillo ~]# cat /root/temp.txt
file copy test.
もしうまくいかない場合は、「grep device-connect-test.sh /var/log/syslog」コマンド等でスクリプトが動いているかどうかを確認して、デバッグしてください。
補足: セキュリティ
今回はUSBメモリに置いたスクリプトを実行することで、ファイルのコピーを実現しています。この方法を使用する場合は、USBメモリに置いたスクリプトの内容によりいろんなことができてしまい、セキュリティとして考えると問題がある場合があります。
そのため、セキュリティ的に問題がでそうな運用を行っている際には、以下の方法もご検討ください。
- USBメモリではなくArmadillo内部のスクリプトにてファイルのコピーを実現する
- 暗号化キーなどを使用して、USBメモリが正しいことを認証できるようにする