Skip to content

Commit 55a1259

Browse files
committed
set serial num in network discovery
1 parent d9c4fb9 commit 55a1259

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
arduino ALL=(ALL) NOPASSWD: /usr/sbin/dpkg-reconfigure openssh-server, /usr/bin/systemctl enable ssh, /usr/bin/systemctl start ssh, /usr/bin/systemctl disable ssh, /usr/bin/systemctl stop ssh, /usr/bin/systemctl disable avahi-daemon, /usr/bin/systemctl stop avahi-daemon, /usr/bin/systemctl enable avahi-daemon, /usr/bin/systemctl start avahi-daemon
1+
arduino ALL=(ALL) NOPASSWD: /usr/sbin/dpkg-reconfigure openssh-server, /usr/bin/systemctl enable ssh, /usr/bin/systemctl start ssh, /usr/bin/systemctl disable ssh, /usr/bin/systemctl stop ssh, /usr/bin/systemctl disable avahi-daemon, /usr/bin/systemctl stop avahi-daemon, /usr/bin/systemctl enable avahi-daemon, /usr/bin/systemctl start avahi-daemon, /usr/bin/mv /tmp/avahi_arduino_conf.service /etc/avahi/services/arduino.service, /usr/bin/chmod 0600 /etc/avahi/services/arduino.service

pkg/board/board.go

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -353,9 +353,8 @@ func EnableNetworkMode(ctx context.Context, conn remote.RemoteConn) error {
353353
{"sudo", "systemctl", "enable", "avahi-daemon"},
354354
{"sudo", "systemctl", "start", "avahi-daemon"},
355355
}
356-
357356
if sn, err := getSerial(&local.LocalConnection{}); err == nil {
358-
if err := setSerialNumber(sn, "/etc/avahi/services/arduino.service"); err != nil {
357+
if err := setSerialNumber(ctx, conn, sn, "/etc/avahi/services/arduino.service"); err != nil {
359358
slog.Warn("failed to set serial number for network mode", slog.Any("error", err))
360359
}
361360
}
@@ -369,38 +368,55 @@ func EnableNetworkMode(ctx context.Context, conn remote.RemoteConn) error {
369368
return nil
370369
}
371370

372-
func setSerialNumber(serialNumber, filePath string) error {
371+
func setSerialNumber(ctx context.Context, conn remote.RemoteConn, serialNumber, filePath string) error {
373372
serialCheckRegex := regexp.MustCompile(`<\s*txt-record\s*>\s*serial_number=\S+\s*<\s*/txt-record\s*>`)
374373
serviceEndTag := regexp.MustCompile(`</service>`)
375374
newSerialTemplate := `<txt-record>serial_number=%s</txt-record>
376375
`
377376
if serialNumber == "" {
378377
return errors.New("missing or empty serial number")
379378
}
380-
381379
data, err := os.ReadFile(filePath)
382380
if err != nil {
383381
if os.IsNotExist(err) {
382+
slog.Warn("service file does not exist, skipping serial number setup", slog.String("filePath", filePath))
384383
return nil
385384
}
386385
return err
387386
}
388-
389387
if serialCheckRegex.Match(data) {
390388
return nil
391389
}
392-
393390
loc := serviceEndTag.FindIndex(data)
394391
if loc == nil {
395392
return errors.New(" </service> tag not found in the service file")
396393
}
397394

398395
var buf bytes.Buffer
399-
buf.Write(data[:loc[0]])
400-
buf.WriteString(fmt.Sprintf(newSerialTemplate, serialNumber))
401-
buf.Write(data[loc[0]:])
396+
_, err = buf.Write(data[:loc[0]])
397+
if err != nil {
398+
return err
399+
}
400+
_, err = buf.WriteString(fmt.Sprintf(newSerialTemplate, serialNumber))
401+
if err != nil {
402+
return err
403+
}
404+
_, err = buf.Write(data[loc[0]:])
405+
if err != nil {
406+
return err
407+
}
402408

403-
return os.WriteFile(filePath, buf.Bytes(), 0600)
409+
tmpPath := "/tmp/avahi_arduino_conf.service"
410+
if err := conn.WriteFile(bytes.NewReader(buf.Bytes()), tmpPath); err != nil {
411+
return fmt.Errorf("failed to write temporary file on remote: %w", err)
412+
}
413+
if out, err := conn.GetCmd("sudo", "mv", tmpPath, filePath).Output(ctx); err != nil {
414+
return fmt.Errorf("failed to move file into place with sudo mv: %w: %s", err, string(out))
415+
}
416+
if out, err := conn.GetCmd("sudo", "chmod", "0644", filePath).Output(ctx); err != nil {
417+
slog.Warn("failed to set permissions on remote service file", "file", filePath, "error", err, "output", string(out))
418+
}
419+
return nil
404420
}
405421

406422
func NetworkModeStatus(ctx context.Context, conn remote.RemoteConn) (bool, error) {

0 commit comments

Comments
 (0)