Wi-Fi設定後のネットワークボリュームのインストール

Wi-Fi設定後のネットワークボリュームのインストール

ネットワークにRaspberry Pi 2を起動した後にマウントしたい共有フォルダがあります。自分のアイテムを編集し、/etc/fstab手動で実行するとmount -aそのアイテムにアクセスできます。インターネット上でさまざまな「ソリューション」を見つけましたが、それらのどれも私に適しているようではありません。

mount -aクイックフィックスでこれらのボリュームをマウントして(使用して)自分のボリュームに追加するスクリプトを作成したので、.bashrcそのユーザーを介して接続するとsshそのボリュームにアクセスできます。

このスクリプトを追加しようとしましたが、うまく/etc/network/if-up.d/いかないようです。なぜこれがうまくいかないのですか?どのような方法が良いですか?

PS:私はosmcRaspbianのバージョンを使用しています(これが単に「osmc」サービスを使用するRaspbianであるか他のディストリビューションであるかはわかりません)。だから私が実行すると、uname -a次のようになります。

Linux osmc 4.2.1-1-osmc #1 SMP PREEMPT Wed Sep 23 17:57:49 UTC 2015 armv7l GNU/Linux

ベストアンサー1

場合によっては、機能しなければならないメカニズムが機能しない理由を特定する必要がある他の作業を実行するよりも多くの作業がある可能性があります。防弾方法。

ブート時に共有フォルダをマウントしたいが、ネットワークが起動するのを待つ必要があります(WRTブートサービスでは、「ネットワーク」と「ネットワークブート」の2つの異なる傾向があります)。これを行う正式な方法は、明らかにifupネットワーク接続(「ネットワーク」と同じではありません)を確立する必要があるサービスに依存するサービスを転送または開始することです。しかし、私たちは何らかの理由でこれらのメカニズムがこの状況では信頼できないことを確認しました。

より「完全な」アプローチを作成するには、このタスクを最も基本的な要素に縮小し、シェルツールを使用して基本的で基本的な方法でこれらの要素を処理する必要があります。まず、ある種のテストを実行してネットワークが正常であることを確認し、テストが成功するまで待つことができます。

あるいは、このテストをスキップして自分で結果をテストすることもできますmount。これは、ネットワーク共有が利用できない場合に失敗します。

#!/bin/bash                                                                          

exec &> /var/log/mountshare.log                                                      

gap=3                                                                                
attempts=40                                                                           

while [ $attempts -gt 0 ]; do                                                        
    mount -v /foo /bar                                                                  
    if [ $? -eq 0 ]; then break; fi                                                   
    attempts=$(($attempts - 1))                                                      
    sleep $gap                                                                       
done

説明する:

  • exec &> /var/log/mountshare.logこのスクリプトのすべての出力をファイルにリダイレクトして、以前のバージョンを上書きします。これは一種のbashismなので、shebangラインは単純ではありません#!/bin/sh。しかし、一般的なLinuxシステムでは、bashを使用することは通常安全な選択です。

  • gapand値は、attempts2分間(十分な時間)3秒ごとに試行されることを意味します。必要に応じて、間隔を1に設定できます。これは、実際にシステムに害を及ぼすことなく、1秒間隔で永久に実行できる信じられないほど小さな作業です。

  • このmount行は具体的です(もちろんカスタマイズが必要です)。自分が望むものを正確に知っているので、これが最善であり、mount -aテストがより正確であることを保証します。防弾。 fstabにリストがある場合は、パラメータ(デバイスパスまたは他の識別子)を使用できる必要がありますが、この要件は完全な特定のコマンドを使用するとより簡単でよりよく満たされます。防弾基準。

  • テストは終了if [ $? -eq 0 ]ステータスを確認しますmount。成功した場合は 0 を返し、失敗した場合は別の値を返します。この場合、マウントはエラーを生成し、この出力はログファイルに残ります。私たちがそれを使用したので、-v呼び出しが成功したときにメッセージも生成します。

  • 次の2行はカウンタ(attempts)を減らし、スリープモードを追加します。 睡眠は非常に重要です。眠れないでこんなことをしないでください。 これがなければ、「文字通り永久に実行される非常に小さなタスク」から、多くのプロセッサ時間を占めるタスクに変わります。

使用するには、例えば/usr/local/bin。 root.root(sudo chown root:root mountmyshare.sh)と実行可能ファイル()があることを確認してくださいchmod 755 mountmyshare.sh。入れない場合は、どこにでも入れることができます。$PATHなぜなら私たちはとにかく絶対的で難攻不落の経路で呼び出すからです。

次に、上から/etc/rc.local

/usr/local/bin/mountmyshare.sh &

これは&非常に重要です。そこに問題を引き起こす可能性がある他のものがある場合に備えて、「一番上に置いてください」と言いました。これは他のものを台無しにしません。

これはレガシーメカニズムですが、/etc/rc.local私が知っている限り、すべての通常のLinuxシステムでは、起動シーケンスが終了したときに実行されます。

おすすめ記事