/etcの設定ファイルが再起動で消えないようにする

PaPeRo iでは/etcはRAMディスクになっており、起動シーケンスの中で毎回同じファイルが生成されるようになっています。
そのため手で作成したり編集しても再起動すると消えてしまいます。
再起動でも消えないようにするためには/Extension/scriptにスクリプトを作成する必要があります。

ファイルをコピーする

 例として/Extension/etc/resolv.confを用意しておき、新たに作成する/Extension/script/S90etcというスクリプトファイルで起動時に/etcにコピーするようにした例です。
rcスクリプトの作法としては

# /Extension/script/S90etc start

とした場合にコピーし、

# /Extension/script/S90etc stop

とした場合には元に戻すべきと思われ、そのようにしていますが、今回の目的であればstopで元に戻すようにする必要・意味はないかも知れません。
なおファイル名をS90etcとしていますが「90」を小さくするほど早く実行されるようになりますので、必要であれば/etc/init.dで他のサービスの起動タイミングを調べ、適切な数字を決定して下さい。

/Extension/script/S90etc:

#!/bin/sh
export PATH=/usr/bin:/bin:/usr/sbin:/sbin

start() {
    if [ -f /Extension/etc/resolv.conf ] ; then
        if [ ! -f /etc/resolv.conf.orig ] ; then
            mv /etc/resolv.conf /etc/resolv.conf.orig
        fi
        cp -p /Extension/etc/resolv.conf /etc
    fi
}
stop() {
    if [ -f /etc/resolv.conf.orig ] ; then
        mv /etc/resolv.conf.orig /etc/resolv.conf
    fi
}
restart() {
    stop
    start
}

case "$1" in
start)
    start
    ;;
stop)
    stop
    ;;
restart)
    restart
    ;;
*)
    echo "usage: $0 { start | stop | restart }" >&2
    exit 1
    ;;
esac
exit 0

また/Extension/script/S90etcには実行権限を付与してください。

# chmod +x /Extension/script/S90etc

ファイルの内容を直接記述する

 SXXファイルに/etcの設定ファイルの内容を直接記述するには以下のように記述します。”EOF”で囲まれた文字列が/etc/resolv.confに書き込まれます(“EOF”はどんな文字列でも構いません)。

start() {
    if [ ! -f /etc/resolv.conf.orig ] ; then
        mv /etc/resolv.conf /etc/resolv.conf.orig
    fi
    cat > /etc/resolv.conf <<EOF
nameserver 192.168.5.1
## this file was created by /Extension/script/S90etc
EOF
}

既存ファイルを修正する

 busybox版(簡易版)ですがsedやawkは存在していますのでこれらを使って既存ファイルを変更する方法もあります。”timeout:2″を”timeout:10″に書き換える例です。

start() {
    if [ ! -f /etc/resolv.conf.orig ] ; then
        mv /etc/resolv.conf /etc/resolv.conf.orig
    fi
    sed 's/timeout:2/timeout:10/' < /etc/resolv.conf.orig > /etc/resolv.conf
}