ブログ

USBメモリ挿入時にUSBメモリのファイルをArmadilloにコピーする

at_ito
2019年1月6日 7時58分

システム運用時にソフトウェアアップデート等の目的で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メモリが正しいことを認証できるようにする