我整理了一些與@ user3486184的註釋在概念上相似的東西,但並未實際使用 chroot
。我利用SystemD來管理direwolf和隨後的激活ax.25接口所需的kissattach命令。
我創建了以下 Systemd模板單元並將其安裝到 /etc/systemd/system/direwolf@.service
。
[Unit] Description = Direwolf%I聲卡調製解調器[Service] Type = simplePrivateTmp = trueExecStart = / usr / bin / direwolf -t 0 -p -c /etc/direwolf/%i.conf -qh -qd#將/ tmp / kisstnc符號鏈接重新定位到/ run / direwolf / <實例名稱>.ExecStartPost = / bin / timeout 10 / bin / sh -c'一會兒!測試-c / tmp / kisstnc;睡一覺完成cp -a / tmp / kisstnc / run / direwolf /%i'#在退出時清理符號鏈接。ExecStopPost= / bin / rm -f /run/direwolf/%i[Install]WantedBy=multi-user.target
“模板單元”使您可以使用同一單元文件啟動服務的多個不同實例。要啟動模板單元,請運行 systemctl unitname @ instancename
,單元中的 instancename
值可以作為%i
使用。因此,在上面的示例中,我可以運行:
systemctl start direwolf @ uhf
或:
systemctl start direwolf @vhf
等等。這將啟動Direwolf指向以實例命名的配置。換句話說,給出後一個示例,它將運行:
/ usr / bin / direwolf -t 0 -p -c /etc/direwolf/vhf.conf -qh -qd
該單元利用 PrivateTmp
偽指令,該偽指令在設置時意味著每個服務都將獲得自己的 / tmp
目錄,該目錄不與其他任何目錄共享。這允許每個Direwolf實例創建它自己的 / tmp / kisstnc
符號鏈接。
Direwolf啟動後,將運行一個 ExecStartPost
。它等待 / tmp / kisstnc
鏈接顯示,然後將其複製到
/ run / direwolf / <instancename>
。如果我同時運行以上兩個 systemctlstart ...
命令,則最終會得到 / run / direwolf / uhf
和 / run / direwolf / vhf
。
我創建了一個伴隨的 kisstnc @ .service
單元,如下所示:
[Unit] Requires = direwolf @ %i.serviceAfter=direwolf@%i.service [Service] Type = simpleExecStart = / usr / sbin / kissattach / run / direwolf /%i%i [Install] WantedBy = multi-user.target
>
有了這個,我可以簡單地運行 systemctl start kisstnc @ uhf
然後:
- Systemd將啟動
direwolf @ uhf
服務,因為 kisstnc @ uhf
服務需要
首先運行。 -
direwolf @ uhf
單元會創建 / run / direwolf / uhf
symlink -
kisstnc @ uhf
單元運行相應的 kissattach
命令
要執行此操作,您的 / etc / ax25 / axports
文件必須具有與您正在使用的實例名稱相匹配的端口名n以上命令。例如,類似這樣的東西:
uhf TEST-0 0 128 2 Direwolf @ radio0vhf TEST-1 0 128 2 Direwolf @ radio1