Jeg har sammensat noget, der konceptuelt ligner @ user3486184s kommentar, men uden faktisk at bruge chroot
. Jeg udnytter SystemD til at styre både direwolf og den efterfølgende kissattach-kommando, der er nødvendig for at aktivere en ax.25-grænseflade.
Jeg oprettede følgende Systemd-skabelonenhed og installerede den til /etc/systemd/system/direwolf@.service .
[Enhed] Beskrivelse = Direwolf% I lydkortmodem [Service] Type = simplePrivateTmp = trueExecStart = / usr / bin / direwolf -t 0 -p -c /etc/direwolf/%i.conf -qh -qd # Flyt / tmp / kisstnc symlink til / run / direwolf / <instansens navn>.ExecStartPost = / bin / timeout 10 / bin / sh -c 'mens! test -c / tmp / kisstnc; sove 1; Færdig; cp -a / tmp / kisstnc / run / direwolf /% i '# Ryd op symlink ved exit.ExecStopPost = / bin / rm -f /run/direwolf/%i [Installer] WantedBy=multi-user.target
En "skabelonenhed" giver dig mulighed for at starte flere forskellige forekomster af aservice ved hjælp af den samme enhedsfil. For at starte en skabelonenhed kører du systemctl unitname @ instancename
, og værdien af instansename
er tilgængelig for dig i enheden som % i
. Så med eksemplet ovenfor kunne jeg køre:
systemctl start direwolf @ uhf
Eller:
systemctl start direwolf @vhf
Etc. Dette starter Direwolf, der peger på en konfiguration, der hedder efter forekomsten; med andre ord, givet det sidstnævnte eksempel, vil dette køre:
/ usr / bin / direwolf -t 0 -p -c /etc/direwolf/vhf.conf -qh -qd
Enheden gør brug af PrivateTmp
-direktivet, som når det er indstillet betyder, at hver tjeneste får sin egen / tmp
-mappe, der ikke deles med noget andet. Dette giver hver Direwolf-instans mulighed for at oprette sin egen / tmp / kisstnc
symlink.
En ExecStartPost
kører, efter Direwolf er startet. Den venter på, at linket / tmp / kisstnc
vises, og derefter kopieres det til
/ run / direwolf / <instancename>
. Hvis jeg kører begge ovenstående systemctlstart ...
kommandoer, ender jeg med / run / direwolf / uhf
og / run / direwolf / vhf kode>.
Jeg har oprettet en ledsager kisstnc @ .service
enhed, der ser sådan ud:
[Enhed] Kræver = direwolf @ %i.serviceAfter=direwolf@%i.service [Service] Type = simpleExecStart = / usr / sbin / kissattach / run / direwolf /% i% i [Install] WantedBy = multi-user.target
Med dette på plads kan jeg simpelthen køre systemctl start kisstnc @ uhf
andthen:
- Systemd starter
direwolf @ uhf
service, fordi kisstnc @ uhf
-tjenesten Kræver
, at den skal køre først. - Enheden
direwolf @ uhf
opretter / run / direwolf / uhf
symlink -
kisstnc @ uhf
enheden kører den passende kissattach
kommando
For at dette skal fungere, skal din / etc / ax25 / axports
-fil have portnavne, der matcher de instansnavne, du bruger i n ovenstående kommandoer. Foreksempel, noget som:
uhf TEST-0 0 128 2 Direwolf @ radio0vhf TEST-1 0 128 2 Direwolf @ radio1