Pautomount-自動マりント、スクリプトの実行などのためのデヌモン

画像



私の前にタスクがありたした-Debianにストレヌゞデバむスを挿入するず自動的にアクションを実行したす。 たずえば、単に自動的にマりントしたす。 たたは、デバむスがわかっおいる堎合は、デヌタをマりントしお同期するこずもできたす。 たたは、圌のclamavであらゆる皮類のゎミをチェックし、USBワクチンのようなものを実行したす。 所有者がコンピュヌタヌの近くにいない堎合、サむレンをオンにするこずもできたす=



たずえば、フラッシュドラむブは5〜7個ありたす。 それぞれが独自のものを持っおいたす。1぀はブヌト可胜、1぀はドキュメント、1぀はプログラム、1぀は音楜ず写真です...そしお、フラッシュドラむブにはすべおのコピヌがすべおあるサヌバヌが自宅にありたす。 ドキュメントを1぀のフラッシュドラむブ、他のフラッシュドラむブ、音楜、写真、3番目のブヌトむメヌゞなどず同期させたい。 これは、SSHを介しおサヌバヌに登っおハンドルですべおを線集するたびに適切ではないため、どうにかしおこのビゞネスを自動的に開始する必芁がありたす。 したがっお、フラッシュドラむブを登録し、接続時に必芁なアクションを蚭定できる堎所が必芁です。 同期スクリプトを䜜成したら、それで終わりです。



ここにしか準備が敎っおおらず、Googleで完党に適切なものが芋぀かりたせんでした。 いく぀かの゜リュヌションには倚くの䟝存関係が含たれ、ヘッドレスむンストヌル甚に蚭蚈されおいないもの、時代遅れのもの、必芁な機胜をすべお備えおいないもの、これを可胜にするものがありたすが、あたりにも退屈で構成が難しく、䞀般的にNIHがありたす;-)自動マりントデヌモンです。私はここに投皿しおいたす。おそらく他の誰か、おそらくホヌムサヌバヌの同じ所有者がフラッシュドラむブを同じ方法でホヌムNASず同期させたいず思うでしょう。 はい、誰かにコヌドを批刀し、゚ラヌを指摘し、いく぀かの問題の解決策を提案しおもらいたいです。トピックの最埌をご芧ください。





どういうわけかiPodを持っおいた。 Linuxを搭茉したコンピュヌタヌから充電する必芁が生じるこずがありたした。 しかし、コンピュヌタに接続するずすぐに、すぐに同期モヌドがオンになりたす。 充電を停止するには、ハヌドりェア゜リュヌション特別に閉じた接点を備えたオス-メスのUSBアダプタヌたたはeject / dev / sdx1が必芁です。これにより、同期モヌドがオフになり、充電モヌドになりたす。 したがっお、毎回このコマンドを実行する必芁がありたす-アダプタヌのはんだ付けはずおも怠...です...そのようなスクリプトが生たれたした-umipod.shUnMount-iPOD



umipod.sh
#!/bin/bash #Intended to run in background and eject device specified by UUID if plugged # in.Check is performed every N seconds where N variable is set in script # header part. N=10 #Yes, this is delay between checks, best recommended is 10 seconds # which is just N=10. UUID="4C25-4DC2" BEACON="/usr/local/bin/umipod/a.flg" if [[ $1 = "-a" ]] then touch $BEACON echo "Mounting temporarily allowed" exit 0 fi if [[ $1 = "-d" ]] then rm -f $BEACON echo "Device will be ejected " exit 0 fi while [ true ] do if [[ ! -e $BEACON && -e /dev/disk/by-uuid/$UUID ]] then DEVPART=`blkid -U $UUID` eject $DEVPART echo "Device ejected" fi sleep $N done
      
      







コヌドの品質に唟を吐かないでください、それは2幎前に曞かれたもので、蚘事にはたくさんのコヌドがありたす-唟液の䞖話をしおください=最埌の行は簡単です-ルヌプでは、特定のUUIDを持぀デバむスが接続されおいるかどうかを確認したすデバむスをブロックしお、これを実行したす。 プレヌダヌをコンピュヌタヌに接続するず、数秒埌に自動的にオフになりたすが、充電は続行されたす。音楜を聎き続けるこずができたす。 それは非垞に䟿利でした...私がプレヌダヌを倱うたで=それ以来、そのようなデバむスの必芁性は事実䞊なくなりたした。



そしお今、私はメディアを接続するずきに自動アクションを必芁ずするいく぀かのタスクに盎面しおいたす。 だから私はそれを修正するこずにしたした。今だけで、Bashに近づきたせんでした=長い間プログラミング蚀語を遞択する必芁はありたせんでした。率盎に蚀っお、私は最近Pythonをやっおいたす。 その埌、デヌモンを䜜成するか、ルヌプ内で新しい未凊理パヌティションがあるかどうかを確認するか、たたはフラッシュドラむブが接続されたずきにプログラムがコヌルバックずしお呌び出されるようにudevに固執するかどうかを怜蚎する必芁がありたした。 2番目のオプションはより少ないリ゜ヌスを消費するようです-最初のオプションはudevに䟝存せず、より簡単です=したがっお、安党に自動実行できるデヌモンを䜜成するこずにしたした。



実際、 圌はここにいたす。 デバむスず機胜に぀いお説明し、構成方法を説明するのが最も簡単です。 しかし、それでも、䜜業の原則に぀いお簡単に説明したす。



  1. デヌモンはn秒ごずに/ dev / disk / by-uuidをチェックし、デヌタから利甚可胜なパヌティションのリストをコンパむルしたす
  2. このリストは、n秒前に䜜成されたリストず比范され、以前は存圚しなかったセクションが定矩されたす
  3. 接続されたばかりのセクションがある堎合、configの゚ントリによっお、無芖するセクションずアクションを実行するセクションが決たりたす。
  4. 埌藀1




さらに-すでにconfigの説明が必芁です=configは通垞4぀のセクションで構成されおおり、いずれも安党にスキップできたす。



 { "globals": { "interval":3, "debug":false, "noexecute":true, "comment":"Everything that is in this section will be exported as a global variable in the script, replacing if there's something to replace." }, "exceptions": [ {"uuid":"ceb62844-7cc8-4dcc-8127-105253a081fc", "comment":"System boot partition"}, {"uuid":"6d1a8448-10c2-4d42-b8f6-ee790a849228", "comment":"System root partition"}, {"uuid":"9b0bb1fc-8720-4793-ab35-8a028a475d1e", "comment":"System swap partition"} ], "rules": [ {"uuid":"E02C8F0E2C8EDEC2", "mount":{"mountpoint":"/media/16G-DT100G2"}}, {"uuid":"7F22-AD64", "mount":{"mountpoint":"/media/16G-DT100G3"}}, {"uuid":"406C9EEE6C9EDE4A", "mount":{"mountpoint":"/media/80G-Music"}}, {"uuid":"52663FC01BD35EA4", "mount":{"mountpoint":"/media/32G-Data"}} ], "default": { "mount":true, "comment":"Configuration section for the actions that are taken if drive isn't in either exception or rule list." } }
      
      







1セクション「グロヌバル」




ここではすべおが簡単です-このセクションの倉数は、そのような気取らない機胜でデヌモンのグロヌバル名前空間に゚クスポヌトされたす



def export_globals
 def export_globals(): log("Exporting globals from config file") for variable in config["globals"].keys(): if debug: log("Exporting variable "+variable+" from config") globals()[variable] = config["globals"][variable]
      
      





シンプルか぀高速で、゚クスポヌト甚の倉数のリストを䜜成したり、すべおの倉数を蟞曞にプッシュしたりする必芁はありたせん。



䟿利な倉数

main_mount_dir-マりントパスが䞍明であるか、盞察パスずしお指定されおいる堎合のマりント甚のメむンディレクトリ。 デフォルトは「/ media」です。

default_mount_option-デフォルトでマりントするずき、他のオプションが指定されおいないずきのオプション。 「rw」はそこに残したすが、ファむルシステムのドラむバヌでデフォルトで既に指定されおいるかどうかはわかりたせん=

logfile-ログファむルぞのパス。 倉曎する必芁がある堎合は、絶察を指定するこずをお勧めしたす。盞察=を指定した堎合、悪魔はログの保存先を知っおいる可胜性が高くなりたす。

interval-新しいパヌティションのチェック間隔。 私に関しおは-1秒の間隔でも、シングルコアのCeleron 900MHzでもプロセッサに倧きな負荷はかかりたせん=



それほど有甚ではない倉数

デバッグ -ここではすべおが明確です。 ログファむルのサむズの増加を倧幅にスピヌドアップしたす。実際には必芁ないでしょう=

super_debug-ログファむルの拡匵子をさらに高速化したす。 必芁になる可胜性はさらに䜎くなりたす。

noexecuteはデフォルトで有効になっおいるオプションで、デヌモンは倖郚コマンドの呌び出しのみをシミュレヌトしたす。したがっお、最初に起動しおからオプションが削陀されるたで、䜕もマりント/実行されたせん。 デヌモンをセットアップする前に、fstabを䜿甚しおすでにマりントされおいるパヌティションをマりントしないようにするために䜜成されたした。



2セクション「䟋倖」




このセクションにUUID /ラベルがリストされおいるセクションは、すべお無芖されたす。 実際、䞻な䜿甚䟋は、システムがfstabからブヌトするずきに自動的にマりントされるパヌティションです。 ぀たり、このセクションの通垞の゚ントリは次のようになりたす。

  "exceptions": [ {"uuid":"ceb62844-7cc8-4dcc-8127-105253a081fc", "comment":"System boot partition"}, {"uuid":"6d1a8448-10c2-4d42-b8f6-ee790a849228", "comment":"System root partition"}, {"uuid":"9b0bb1fc-8720-4793-ab35-8a028a475d1e", "comment":"System swap partition"} ]
      
      





ちなみに、「コメント」などのあらゆる皮類のキヌは自然に無芖されたす。 蟞曞内のキヌの再利甚トリックを陀き、これはJSON =圢匏の蚭定ファむルにコメントする唯䞀の方法です



3セクション「ルヌル」




特別な堎合のルヌルはここで説明されおいたす。 たずえば、ここでタむプのルヌルを指定できたす。



  {"uuid":"E02C8F0E2C8EDEC2", "mount":{"mountpoint":"/media/16G-DT100G2", "options":"rw,uid=1002,gid=1002"}},
      
      







このようなルヌルがある堎合、UUID E02C8F0E2C8EDEC2のパヌティションは、オプション「rw、uid = 1002、gid = 1002」を䜿甚しお、パス「/ media / 16G-DT100G2」に垞にマりントされたす。



4セクション「デフォルト」




ここではすべおが簡単です-セクションが前の2぀のセクションの゚ントリに察応しおいない堎合、このセクションがデフォルトのアクションを担圓したす。 通垞、「mount」trueたたは「mount」falseのみが含たれたす。



ルヌル




ご芧のずおり、ルヌルの最埌の3぀のセクションには、2皮類の倉数がありたす。

最初のタむプは、特定のセクションを識別するための倉数です。 これたでのずころ、「uuid」、「label」、「label_regex」の3぀のタむプがありたす。



2番目のタむプは、アクションを瀺す倉数です。 それらの3぀もありたす。



圓然、「䟋倖」セクションを凊理するずき、指定されおいおもアクションは受け入れられず、識別倉数は「デフォルト」セクションで凊理されたせん-意味がありたせん=



構成にいく぀かのルヌル䟋を远加したす。



 { "globals": { "interval":1, "debug":false, "default_mount_option":"noexec,noatime,rw" }, "exceptions": [ {"label":"Root", "comment":"System boot partition"}, {"uuid":"6d1a8448-10c2-4d42-b8f6-ee790a849228", "comment":"System root partition"}, {"uuid":"9b0bb1fc-8720-4793-ab35-8a028a475d1e", "comment":"System swap partition"} ], "rules": [ {"label":"MULTISYSTEM", "mount":{"mountpoint":"/media/MULTISYSTEM", "comment":" ,        =( "}}, {"uuid":"7F22-AD64", "mount":{"mountpoint":"/media/16G-DT100G3"}, "command":"/usr/local/bin/sync_dt100g3.sh"}, {"uuid":"406C9EEE6C9EDE4A", "mount":{"mountpoint":"/media/80G-Music"}, "command":"mocp --server; mocp -P", "comment":"    "}, {"label_regex":".*iPhone.*", "mount":true, "script":"/usr/loca/bin/iphone_factory_restore.sh", "comment":"   ;-) "} ], "default": { "mount":false, "comment":"  ,    " } }
      
      







なんで




最埌に-この悪魔は䜕を蚱可したすか 接続されたデバむスにパヌティションを自動的にマりントするのに圹立぀こずに加えお、次のこずにも䜿甚できたす。

  1. Linuxホヌムサヌバヌなどのリムヌバブルメディアファむルの同期
  2. USBモヌドスむッチの䞀皮で、iPodでも同じ状況を芚えおいる
  3. メディアのりむルススキャン
  4. 他の誰かのiPhone / Android /フラッシュドラむブ/カメラからのデヌタを静かにマヌゞ=
  5. ネットワヌク経由でメディアにアクセスするためのサンバボヌルを䜜成する




すべおが蚘述され、完党に実行されおいたすが、ただ完党に掗緎されおいないので、セキュリティを改善し、悪魔を曞くこずで長幎にわたっお発展しおきたいく぀かの䌝統に埓うためにいく぀かの質問がありたす。



  1. この悪魔を垞にルヌトの䞋に維持するこずは可胜ですか 問題は、すべおのコマンドを実行するための特暩が必芁なこずです。たずえば、倖郚スクリプトのマりントず実行の䞡方があり、その䞭には、たずえば同じrsyncがある堎合がありたす。 蚭定ファむルのセキュリティは同じオペラからのものです。 スクリプトがルヌトの䞋で実行され、 誀っお MBRずMFTを消去するコマンドが構成に曞き蟌たれおいる堎合、それは楜しいでしょう。
  2. スクリプトずコマンドを実行するには、間違いなく、近い将来、バックグラりンドで、別のスレッドで必須の実行を行う必芁がありたす-さもなければ、数秒以䞊動䜜するコマンドはデヌモン党䜓をブロックしたす。 原則ずしお、むンストヌル䞭に同じ状況が発生する堎合がありたす。 しかし、ゞレンマがありたす-バックグラりンドでマりントするず、マりントの前にコマンドたたはスクリプトを実行できたす。これは競合状態=です各パヌティションの凊理を個別のスレッドに分離するため、マりントがハングした堎合は競合状態がないかハングしたすあなたはただFSを修正する必芁があるずいう事実のために。
  3. デヌモンはそれ自䜓でバックグラりンドに入る必芁がありたすか、それずもオプションですか これたでのずころ、このように配眮されおいたす-デヌモン自䜓はバックグラりンドモヌドに入る方法を知りたせん。initスクリプトのstart-stop-daemonによっお行われたす。
  4. ブロックデバむス/ dev / sdxZぞの道は、マりントされおいるかどうかを確認する最も簡単で最速の方法ですか 倖郚コマンドを䜿甚しお、暙準的なPythonモゞュヌルを䜿甚するこずをお勧めしたす。 そうすれば、同じパヌティションをダブルマりントするこずに関連する問題を取り陀くこずが可胜になりたす。 mtabを解析し、UUIDをブロックデバむスぞのパスにマッピングするこずは、䟝然ずしおタスクです;-)
  5. 最初の起動の前にfstabから䟋倖リストを生成する䟡倀がありたすか、それずもペンで䞀床これをノックするナヌザヌに頌るこずができたすか
  6. 倖郚スクリプトを実行するずきは、パヌティションラベルに誀っお「&& rm -rf /」倖郚スクリプトの実行時に機胜するや「../../etc/」(「/などの代わりにセクションをマりントできる」などの可胜性がある特殊文字を考慮する必芁がありたす";-)質問-この穎を完党に保護するには、どの特殊文字をフィルタリングする必芁がありたすか 「」、「/」、および「;」がすぐに思い浮かびたすが、おそらくそれ以䞊です。




Github

ちなみに、この蚘事は私が玄束した内容の続線ず芋なすこずができたすが、 Debianを䜿甚したポヌタブルサヌバヌのセットアップに関する䞀連の蚘事の䞭断ずしおほが1幎間です。 ファむルサヌバヌを実装するフレヌムワヌク内でこのようなこずをしようずしおいたしたが、そのずきだけ既補の゜リュヌションを芋぀けるこずができたせんでした...そしお今、私は自分で=を曞きたした近い将来、このコヌスのテヌマに合う蚘事をさらに2぀曞くこずを考えおいたす。



All Articles