Spørgsmål:
Brug af Direwolf med flere radioer?
larsks
2018-08-29 07:54:18 UTC
view on stackexchange narkive permalink

Jeg vil gerne lege med ax.25-forbindelser. Det ser ud til, at hvis jeg har mere end en radio (der fungerer på forskellige frekvenser), ville jeg gerne have flere ax.25-grænseflader. Direwolf opretter et / tmp / kisstnc symlink til KISS pty-enheden, og denne sti er hårdkodet. Dette betyder, at du kun kan køre en enkelt forekomst af Direwolf, der leverer en KISS pty-grænseflade ... og da kissattach kun synes at fungere med karakterenheder, ser det ud til at begrænse et system til en enkelt akse.25 interface, når du bruger direwolf.

Hvis jeg vil køre flere direwolf-kontrollerede ax.25-grænseflader, hvad er mine muligheder? Tænker jeg på det på den forkerte måde? Er der en måde at tilslutte en ax.25-grænseflade til Direwolfs KISS-netværksport i stedet for at bruge pty-enheden?

Mit første instinkt ville være at kompilere en separat direwolf-binær, der brugte et andet filnavn (eller lade dig sende et filnavn ind). Derefter kunne du køre de to forekomster samtidigt og tale til forskellige lydkort. En anden mulighed kan være at chroot, så hver direwolf kørte sin egen / tmp - så kunne du henvise til / foo / bar / tmp / kisstnc uden for chrootfængslet.
En svar:
larsks
2018-08-31 17:13:47 UTC
view on stackexchange narkive permalink

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  


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 4.0-licens, den distribueres under.
Loading...