Posts Tagged ‘Debian’

Samstag, 14. Juni 2025

Ein ZTE MF79U 4G USB-Modem unter Debian zum Laufen bringen

Ich habe mir kürzlich über Amazon ein ZTE MF79U 4G Mobilfunkmodem gekauft. Zusätzlich dazu noch eine Digitec IoT SIM mit 0.4 MBit/s (Anbieter: digital republic), welche im Jahr mit 44 CHF zu buche schlägt.

Einsatzzweck: Out-of-band (OOB) Lösung an einem WLAN-Travelrouter einer Bekannten. Der Router verbindet sich als WLAN-Client mit einem WLAN-Netzwerk eines Drittanbieters (analog zu einem Gäste-WiFi in einem Hotel), welches quartalsweise ein neues WLAN-Passwort erhält (ja, der Anbieter ist noch nicht auf die Idee gekommen, das WLAN zu öffnen und stattdessen mit Portal-Technologie zu arbeiten, welche einzelne Clients mit Benutzernamen und Passwort authentifziert).

Ich möchte damit künftig vermeiden, dass ich vor Ort das WiFi-Kennwort anpassen gehen muss, damit sich der WLAN-Travelrouter wieder mit dem WLAN-Netzwerk der Institution verbindet.

Der Plan ist, dass künftig auf dem Travelrouter basierend auf OpenWRT über das 4G-Interface ein Reverse SSH Tunnel zu einem meiner Server geöffnet wird, über welchen ich dann aus der Ferne auf den Router und das Web-Interface zugreifen kann (meines Wissens könnte ich das Kennwort vermutlich auch auf der Kommandozeile wechseln, aber soweit bin ich noch nicht).

Gestern habe ich den USB-Stick an einem Debian-Server in Betrieb genommen. Was ich dabei gelernt habe:

Das Teil findet man sofort nach Anschluss mittels lsusb:

# lsusb
...
Bus 001 Device 006: ID 19d2:1405 ZTE WCDMA Technologies MSM ZTE Mobile Boardband

Die Bedeutung der Produkt-ID 1405 ist hier dokumentiert: ZTE MF 823 (Megafon M100-3) 4G Modem

1405

A communication mode in which the device has a wikipedia:USB communications device class interface in addition to the card reader interface. Communications Device Class (CDC) should work in Linux. The cdc_ether kernel module is required. This mode will be the one usb_modeswitch will switch the device into.

Der Stick stellt auch ein Block-Device (Speicher) zur Verfügung; das ist nur unter Windows nützlich, weil sich auf dem Datenträger die Treiber für den Stick finden. Clever!

# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sr0     11:0    1   6.8M  0 rom
# blkid
...
/dev/sr0: BLOCK_SIZE="2048" UUID="2022-06-21-14-31-58-00" LABEL="ZTEMODEM" TYPE="iso9660" PTTYPE="mac"

Der USB-Stick spannt ein eigenes WLAN-Netzwerk auf, sobald er Strom hat. IP-Adressbereich ist 192.168.0.1/24. Die SSID und das Kennwort findet man unter der Abdeckung des Sticks, welche einem Zugang zum physischen SIM-Slot erlaubt.

Der Stick hat eine Weboberfläche unter http://192.168.0.1/, mit welcher man alle möglichen Einstellungen vornehmen kann. Das admin-Kennwort ist ebenfalls unter der Abdeckung aufgedruckt.

Ich musste meines Wissens eine Runde in der Web-Oberfläche drehen und die (bereits aktivierte) SIM-Karte einschalten, sonst hätte sich der Stick nicht mit dem Internet verbunden.

Der Clou: Verbindet man Geräte mit dem WiFi des USB-Sticks, können alle Geräte über die Mobilfunkverbindung ins Internet. Gemäss Web-Oberfläche ist die Zahl der Clients auf 10 beschränkt, diese Zahl scheint aber anpassbar zu sein.

Unter Debian wird der Stick problemlos auch als USB-basiertes Ethernet-Interface erkannt (Treiber: cdc_ether:

# lsmod | grep -i ether
cdc_ether              24576  0
usbnet                 57344  1 cdc_ether
usbcore               348160  8 ehci_pci,usbnet,usb_storage,uvcvideo,ehci_hcd,cdc_ether,uas,uhci_hcd
# ip a
...
5: enx344b50000000:  mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 34:4b:50:00:00:00 brd ff:ff:ff:ff:ff:ff

Damit man den Laptop über dieses Interface mit dem Internet verbinden kann, muss folgendes geschehen:

  • Interface hochbringen: ip link set enx344b50000000 up
  • IP-Adresse beziehen: dhclient enx344b50000000 -v
# dhclient enx344b50000000 -v
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/enx344b50000000/34:4b:50:00:00:00
Sending on   LPF/enx344b50000000/34:4b:50:00:00:00
Sending on   Socket/fallback
DHCPDISCOVER on enx344b50000000 to 255.255.255.255 port 67 interval 7
DHCPOFFER of 192.168.0.169 from 192.168.0.1
DHCPREQUEST for 192.168.0.169 on enx344b50000000 to 255.255.255.255 port 67
DHCPACK of 192.168.0.169 from 192.168.0.1
bound to 192.168.0.169 -- renewal in 38135 seconds.

Sobald der Server eine IP in der 192.168.0.1/24-Range besitzt, sollte man über dieses Interface ins Internet rauspingen können:

# ping -I enx344b50000000 1.1.1.1
PING 1.1.1.1 (1.1.1.1) from 192.168.0.169 enx344b50000000: 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=54 time=177 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=54 time=18.2 ms
^C
--- 1.1.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 18.203/97.527/176.851/79.324 ms

Die Frage ist nun, ob diese Schritte an einem OpenWRT-Router automatisiert werden kann.

Nachteil: Der Stick selber macht NAT, und somit kann man in Double-NAT-Situationen landen. Einige Sticks scheinen einen Bridge-Mode zu besitzen, doch diese Option habe ich bei meinem Stick nicht gefunden.

Nachtrag

Ich habe unter Linux beim rumpröbeln einige Pakete installiert, weiss aber nicht, ob das nötig gewesen wäre:

  • usb-modeswitch
  • ppp
  • libnss-myhostname
  • libnss-resolve
  • modemmanager

Tags: , , , , , , , ,
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 28. März 2024

Debian Bookworm: scp meldet „Connection closed“

Ich plane, hier einige Blog-Artikel zum Upgrade meiner Debian Bullseye-Server auf Bookworm und dabei aufgetretenen Problemen zu veröffentlichen.

Erstes Problem: Ein Cron Job, der jede Stunde ein bash-Script aufruft, lief nach dem Upgrade nicht mehr durch.

Die Fehlermeldung:

...
/usr/bin/scp: Connection closed

Auf dem Server (dem Zielsystem) wurde folgendes geloggt:

Mar 26 01:00:15 SERVER sshd[1090765]: Connection from 10.10.10.19 port 33968 on 10.10.10.102 port 22 rdomain ""
Mar 26 01:00:15 SERVER sshd[1090765]: Accepted key RSA SHA256:X found at /home/cronbackup/.ssh/authorized_keys:1
Mar 26 01:00:15 SERVER sshd[1090765]: Postponed publickey for cronbackup from 10.10.10.19 port 33968 ssh2 [preauth]
Mar 26 01:00:16 SERVER sshd[1090765]: Accepted key RSA SHA256:X found at /home/cronbackup/.ssh/authorized_keys:1
Mar 26 01:00:16 SERVER sshd[1090765]: Accepted publickey for cronbackup from 10.10.10.19 port 33968 ssh2: RSA SHA256:X
Mar 26 01:00:16 SERVER sshd[1090765]: pam_unix(sshd:session): session opened for user cronbackup(uid=1001) by (uid=0)
Mar 26 01:00:16 SERVER systemd-logind[630]: New session 1240768 of user cronbackup.
Mar 26 01:00:16 SERVER systemd: pam_unix(systemd-user:session): session opened for user cronbackup(uid=1001) by (uid=0)
Mar 26 01:00:16 SERVER sshd[1090765]: pam_tty_audit(sshd:session): changed status from 0 to 1
Mar 26 01:00:16 SERVER sshd[1090765]: User child is on pid 1090789
Mar 26 01:00:16 SERVER sshd[1090789]: Starting session: subsystem 'sftp' for cronbackup from 10.10.10.19 port 33968 id 0
Mar 26 01:00:16 SERVER sshd[1090789]: Close session: user cronbackup from 10.10.10.19 port 33968 id 0
Mar 26 01:00:16 SERVER sshd[1090789]: Received disconnect from 10.10.10.19 port 33968:11: disconnected by user
Mar 26 01:00:16 SERVER sshd[1090789]: Disconnected from user cronbackup 10.10.10.19 port 33968
Mar 26 01:00:16 SERVER sshd[1090765]: pam_unix(sshd:session): session closed for user cronbackup
Mar 26 01:00:16 SERVER sshd[1090765]: pam_tty_audit(sshd:session): restored status to 0
Mar 26 01:00:16 SERVER systemd-logind[630]: Session 1240768 logged out. Waiting for processes to exit.
Mar 26 01:00:16 SERVER systemd-logind[630]: Removed session 1240768.

Nach etwas Googlen dann die Lösung:

Note: Since OpenSSH 8.8 the scp utility uses the SFTP protocol by default. The -O option must be used to use the legacy SCP protocol.

Quelle: ssh working on all devices but scp from some devices gives „Connection closed“ error

Seit ich im bash-Script das Argument -O ergänzt habe, läuft der Cron Job wieder durch.

Tags: , , , , ,
Labels: Uncategorized

2 Kommentare | neuen Kommentar verfassen

Sonntag, 17. März 2024

Wo ist der GRUB Bootloader alles installiert?

Vor einigen Wochen spukte eine SSD in einem meiner physischen Servern. Ich entschied mich, eine neue SSD zu kaufen, den kompletten Inhalt der alten SSD auf die neue SSD zu klonen, und dann die neue SSD als neue Festplatte in den Server einzubauen (die alte SSD wanderte ins Archiv).

Als ich gestern das Debian GNU/Linux auf diesem Server aktualisierte, bemerkte Debian, dass es auf einer neuen SSD lief, und fragte mich, wo ich den GRUB Bootloader überall installieren wollte (/dev/sda, das heisst auf der Festplatte selber, plus /dev/sda1, auf der ersten (Boot-)Partition).

GRUB war natürlich bereits installiert, sonst hätte der Server nach dem SSD-Wechsel nicht gebootet — aber vermutlich war in der GRUB-Konfiguration noch die Referenz auf die alte SSD enthalten und nicht auf die neue.

Überfordert entschied ich mich wie im Dialog angeregt, den Bootloader sowohl auf /dev/sda als auch /dev/sda1 zu installieren. Das sei die sicherste Methode.

Später dann fand ich nach einer mehrminütigen Internetsuche heraus, wie ich bei einem „baugleichen“ Server hätte nachschauen können, wo der Bootloader alles installiert ist:

# debconf-show grub-pc
  grub2/kfreebsd_cmdline:
  grub2/device_map_regenerated:
* grub2/linux_cmdline_default: quiet
  grub-pc/timeout: 5
* grub2/linux_cmdline:
  grub-pc/partition_description:
  grub2/kfreebsd_cmdline_default: quiet
* grub-pc/install_devices_disks_changed: /dev/disk/by-id/ata-SanDisk_SDSSDA120G_XXXXXXXXXXXX
  grub-pc/install_devices_failed_upgrade: true
  grub2/force_efi_extra_removable: false
  grub-pc/disk_description:
* grub-pc/install_devices: /dev/disk/by-id/ata-SanDisk_SDSSDA120G_XXXXXXXXXXXX
  grub-pc/kopt_extracted: false
  grub-pc/chainload_from_menu.lst: true
  grub-pc/postrm_purge_boot_grub: false
  grub2/update_nvram: true
  grub-pc/install_devices_failed: false
  grub-pc/install_devices_empty: false
  grub-pc/mixed_legacy_and_grub2: true
  grub-pc/hidden_timeout: false

Sprich: Nur auf /dev/sda.

Auf dem Server mit der ausgewechselten SSD schaut es nun halt leider so aus:

# debconf-show grub-pc
* grub-pc/install_devices: /dev/disk/by-id/ata-KINGSTON_SA400S37480G_XXXXXXXXXXXXXXXX, /dev/disk/by-id/ata-KINGSTON_SA400S37480G_XXXXXXXXXXXXXXXX-part1
  grub-pc/install_devices_empty: false
  grub2/force_efi_extra_removable: false
  grub-pc/install_devices_failed: false
  grub-pc/install_devices_failed_upgrade: true
* grub2/linux_cmdline:
  grub-pc/postrm_purge_boot_grub: false
  grub-pc/mixed_legacy_and_grub2: true
* grub-pc/install_devices_disks_changed: /dev/disk/by-id/ata-KINGSTON_SA400S37480G_XXXXXXXXXXXXXXXX, /dev/disk/by-id/ata-KINGSTON_SA400S37480G_XXXXXXXXXXXXXXXX-part1
  grub-pc/timeout: 5
  grub2/kfreebsd_cmdline:
  grub-pc/chainload_from_menu.lst: true
  grub2/update_nvram: true
  grub-pc/disk_description:
  grub-pc/hidden_timeout: false
  grub-pc/kopt_extracted: false
* grub2/linux_cmdline_default: consoleblank=60
  grub2/kfreebsd_cmdline_default: quiet
  grub-pc/partition_description:

Sprich: Man sieht, dass der Bootloader sowohl auf die Festplatte, als auch die erste Partition („part1“) installiert wird.

Tags: , , , , , , , , , , , ,
Labels: IT, Linux

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 2. August 2023

unifi-video unter Debian Bullseye installieren

ACHTUNG: Wie ich erst nach der Installation von unifi-video und dem Verfassen des Blog-Beitrags realisiert habe, wurde UniFi Video eingestellt (End-of-Life EOL) (Quelle). Das Nachfolgeprodukt is UniFi Protect, welches ausschliesslich auf UniFi-Hardware läuft. Dann wird es dann wohl doch einfach eine Wyze Cam

Momentan evaluiere ich für einen Bekannten UniFi Protect Videokameras.

Im Einführungs-Video What do I need to run Unifi Protect? (in diese Web-Seite eingebettet) zu UniFi Protect (der Produktlinie von Ubiquiti UniFi Videokameras) wird einem gesagt, dass man einen UniFi Cloud Key (UCK-G2-Plus), eine UniFi Dream Machine Pro (UDM-Pro) oder eine Ubiquiti Network Video Recorder-Appliance (UNVR) kaufen muss, um das LAN mit Network Video Recording-Fähigkeiten auszurüsten.

Ich habe aber meinen UniFi-Controller als Software-Paket auf einem Lenovo-Laptop mit Debian Bullseye laufen.

Tatsächlich ist auch ein Debian Package namens unifi-video verfügbar. Dieses lässt sich auch unter Bullseye installieren.

Entweder mit einem Bash-Script von Glenn Rietveld. Das Herunterladen von Bash-Scripts aus dem Internet und ausführen als root sagt mir aber nicht wirklich zu. Berufskrankheit.

Es geht aber auch anders, für Debianistas ganz „normal“: Mit apt-get install unifi-video. Wie man das macht, ist aber im Internet schlecht dokumentiert. Mit etwas pröbeln habe ich es soeben geschafft:

Zuerst fügt man den GPG-Key des Repositories hinzu:

# curl -fsSL http://www.ubnt.com/downloads/unifi-video/apt-3.x/unifi-video.gpg.key | apt-key add -

Anschliessend fügt man folgende Zeile in /etc/apt/sources hinzu:

...
deb         http://www.ubnt.com/downloads/unifi-video/apt-3.x stretch ubiquiti
...

WICHTIG: Obwohl ich bullseye am Laufen habe, kennt das Repository nur stretch. Dennoch funktioniert danach ein …

# apt-get update
# apt-get install unifi-video

… problemlos.

Danach läuft das Teil auch schon:

# ps ax | grep unifi-video
3629722 ?        Ss     0:00 unifi-video -cwd /usr/lib/unifi-video -user unifi-video -home /usr/lib/jvm/java-1.8.0-openjdk-amd64 -cp /usr/share/java/commons-daemon.jar:/usr/lib/unifi-video/lib/airvision.jar -pidfile /var/run/unifi-video/unifi-video.pid -procname unifi-video -Dav.tempdir=/var/cache/unifi-video -Djava.security.egd=file:/dev/./urandom -Xmx941M -Xss512K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:MaxMetaspaceSize=1024M -Djava.library.path=/usr/lib/unifi-video/lib -Djava.awt.headless=true -Djavax.net.ssl.trustStore=/usr/lib/unifi-video/data/ufv-truststore -Dfile.encoding=UTF-8 com.ubnt.airvision.Main start
3629724 ?        Sl     0:32 unifi-video -cwd /usr/lib/unifi-video -user unifi-video -home /usr/lib/jvm/java-1.8.0-openjdk-amd64 -cp /usr/share/java/commons-daemon.jar:/usr/lib/unifi-video/lib/airvision.jar -pidfile /var/run/unifi-video/unifi-video.pid -procname unifi-video -Dav.tempdir=/var/cache/unifi-video -Djava.security.egd=file:/dev/./urandom -Xmx941M -Xss512K -XX:+UseG1GC -XX:+UseStringDeduplication -XX:MaxMetaspaceSize=1024M -Djava.library.path=/usr/lib/unifi-video/lib -Djava.awt.headless=true -Djavax.net.ssl.trustStore=/usr/lib/unifi-video/data/ufv-truststore -Dfile.encoding=UTF-8 com.ubnt.airvision.Main start
3632137 ?        Sl     0:05 bin/mongod --config /usr/lib/unifi-video/conf/mongodv3.0+.conf
3633173 ?        Sl     0:00 bin/evostreamms /usr/lib/unifi-video/conf/evostream/config.lua

Das Web-Interface öffnet man über 1.2.3.4:7443 (https nicht vergessen, mit http klappt es nicht).

Versucht man stattdessen, anstelle von stretch das Paket für den Release bullseye herunterzuladen, erhält man folgende Fehlermeldung:

...
Ign:8 https://dl.ui.com/unifi-video/apt-3.x bullseye InRelease
Err:9 https://dl.ui.com/unifi-video/apt-3.x bullseye Release
  404  Not Found [IP: 13.224.100.217 443]
Reading package lists... Done
E: The repository 'http://www.ubnt.com/downloads/unifi-video/apt-3.x bullseye Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

Konsultierte Web-Seiten:

Tags: , , , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Montag, 3. Juli 2023

ConBee II USB-Stick wird nach Debian-Update nicht mehr erkannt

Nach einer Stunde debugging, USB-Stick ausstöpseln, einstöpseln und dutzende Male Firmware flashen entdecke ich endlich After a sudo apt update && sudo apt full-upgrade and a reboot deconz no longer connects to the conbee 2:

Das heute Vormittag eingespielte Debian-Update löscht /dev/serial/by-id/*. Dies verhindert offenbar, dass deCONZ Phoscon den USB-Stick findet. Das Problem erkennt man auch daran, dass folgender Befehl nichts findet:

# GCFFlasher_internal -l
GCFFlasher V3_17 (c) dresden elektronik ingenieurtechnik gmbh
Path             | Vendor | Product | Serial     | Type
-----------------+--------+---------+------------+-------

Auf einem Raspberry Pi mit existierendem /dev/serial/by-id/* schaut das hingegen noch so aus:

# GCFFlasher_internal -l
GCFFlasher V3_17 (c) dresden elektronik ingenieurtechnik gmbh
Path             | Vendor | Product | Serial     | Type
-----------------+--------+---------+------------+-------
/dev/ttyAMA0     | 0x0000 | 0x0000  |            | RaspBee 
/dev/ttyACM0     | 0x1CF1 | 0x0030  | DE1234567  | ConBee II

Die Lösung: In deconz.service einfach noch das USB-Device mitgeben: ExecStart=/usr/bin/deCONZ ... --dev=/dev/ttyACM0. ttyACM0 ersetzt man mit dem tatsächlichen Device (findet man mittels dmesg gleich nachdem man es eingestöpselt hat).

Danach den Service stoppen, neu starten — und dann sollte die ZigBee-Welt wieder in Ordnung sein (der Ausfall des USB-Sticks während zwölf Stunden machte es nötig, dass ich bei vielen Sensoren kurz den Knopf manuell drücken musste, um sicherzustellen, dass die Verbindung und Datenanlieferung noch funktioniert …)

Wichtig: dmesg muss den USB-Stick erkennen …

...
[55209365.334638] usb 2-3: new full-speed USB device number 15 using xhci_hcd
[55209365.488837] usb 2-3: New USB device found, idVendor=1cf1, idProduct=0030, bcdDevice= 1.00
[55209365.493029] usb 2-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[55209365.497062] usb 2-3: Product: ConBee II
[55209365.501528] usb 2-3: Manufacturer: dresden elektronik ingenieurtechnik GmbH
[55209365.505835] usb 2-3: SerialNumber: DE1234567
[55209365.512617] cdc_acm 2-3:1.0: ttyACM3: USB ACM device
...

… und mit lsusb muss er auch aufgeführt sein — sonst könnte ein anderes Problem vorliegen:

...
Bus 002 Device 013: ID 1cf1:0030 Dresden Elektronik ZigBee gateway [ConBee II]
...

In der Zwischenzeit hatte ich alles ausprobiert, insbesondere dutzende Male das Firmware geflashed. Hierzu habe ich die ZIP-Datei des neuesten (Beta) Release 4.0.4 von gcfflasher heruntergeladen und auf zwei Linux-PCs sowie macOS entpackt.

Um den Flasher zu kompilieren, installiert man unter Debian zuerst die benötigten Pakete (unter macOS geht’s gleich weiter zur Kompilation):

# apt-get install pkg-config build-essential libgpiod-dev

Danach kompiliert man das Binary:

./build_posix.sh

Anschliessend lädt man die neueste Firmware vom offiziellen Server in das Flasher-Verzeichnis herunter, und gibt dann unter Linux ein:

# ./GCFFlasher -d /dev/ttyACM3 -t 60 -f ./deCONZ_ConBeeII_0x26780700.bin.GCF

Unter macOS lautete der Befehl:

# ./GCFFlasher -d /dev/cu.usbmodemDE1234567 -t 60 -f ~/tmp/deCONZ_ConBeeII_0x26780700.bin.GCF

Auch hier wieder beachten, das effektive Device (unter Linux war es bei mir auf einem Laptop /dev/ttyACM0, auf dem anderen /dev/ttyACM3; unter macOS war es /dev/cu.usbmodemDE24421441) mitzugeben. Dass der Flasher richtig funktioniert, seht ihr, wenn folgende Ausgabe erscheint:

read file success: ./deCONZ_ConBeeII_0x26780700.bin.GCF (163244 bytes)
flash firmware
command reset done
query bootloader id V1
bootloader detected (60)
 100 %ding ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
done, wait validation...
firmware successful written

Manchmal auch

read file success: ./deCONZ_ConBeeII_0x26780700.bin.GCF (163244 bytes)
flash firmware
command reset done
query bootloader id V1
bootloader detected (60)
bootloader syned: unlock! READY
 100 %ding ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
done, wait validation...
firmware successful written

Den Diskussionsforen entnehme ich zudem, dass es vorkommen kann, dass das System den USB-Stick „vergisst“. In dem Fall startet man den Firmware-Update-Befehl bevor man den USB-Stick überhaupt eingestöpselt hat. Während sich die Meldungen à la retry connect bootloader /dev/cu.usbmodemDE1234567 auf dem Bildschirm stapeln, stöpselt man den USB-Stick ein, und dann sollte das Firmware-Update umgehend beginnen.

Links

Tags: , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 26. März 2023

Die Log-Syntax zu geöffneten root sessions in auth.log hat sich geändert

Ich verwende monit extensiv, um viele Aspekte meines Linux-Server Fuhrparks zu überwachen.

Ein detektivischer „Sicherheitscheck“, den ich mit monit abdecke, sind Alarme zu frisch geöffneten root Sessions (der Informationssicherheits-Mensch in mir erhofft sich damit, irgendeines Tages so einen Angreifer zu entdecken):

check file su_root with path /var/log/auth.log
  if match "session opened for user root by" then alert

Ich kriege jedes Mal ein Email, wenn jemand eine root-Session eröffnet. Denn in auth.log findet sich dann jeweils folgender Eintrag:

Mar 26 13:33:16 localhost sudo: pam_unix(sudo:session): session opened for user root by pi(uid=0)

Seit einiger Zeit sind diese Emails für einige meiner Debian-Server verstummt (konkret: die x86er, während die Raspberry Pis fröhlich vor sich hermelden).

Heute machte ich mich daran, das Problem zu erforschen und zu lösen.

Erkenntnis: Die Syntax hat sich leicht geändert:

Mar 26 13:33:05 SERVER su: pam_unix(su-l:session): session opened for user root(uid=0) by mario(uid=0)

Deshalb habe ich die monit-Konfiguration angepasst:

check file su_root with path /var/log/auth.log
  if match "session opened for user root" then alert

Jetzt kommen die Alarme wieder …

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Montag, 2. Januar 2023

Ein Apple SuperDrive unter Linux zum Laufen bringen

Die Feiertage sind für mich auch immer der Zeitpunkt, um mal wieder so richtig aufzuräumen. Dieses Jahr — ein Jahr nach dem Umzug — war der Keller dran. Unter anderem ging es Bundesordnern mit Unterlagen seit Mitte 1990er bis 2011 an den Kragen.

Mit meinem Fujitsu ScanSnap iX 1500 wurden alle Blätter gescannt, danach lief mit ABBYY FineReader PDF for Mac die OCR-Texterkennung darüber, und schlussendlich habe ich die PDFs auf dem lokalen Laufwerk abgelegt.

Ein Ordner enthielt auch CDs und DVDs für Web-Projekte der späten 1990er und frühen 2000er. Zum Glück hatte ich mir — in weiser Voraussicht — vor einiger Zeit ein Apple SuperDrive (A1379) gekauft, welches mit USB an beliebige Computer angeschlossen werden kann.

Bevor ich also die CDs und DVDs entsorgte, wollte ich die Daten damit ebenfalls auf den lokalen Computer sichern.

Erkenntnis: Von ungefähr einem Dutzend CDs und DVDs waren alle (!) noch lesbar. Bei zwei Datenträgern motzte macOS aber, dass diese ein „nicht unterstützes Format“ aufweisen (Nachtrag: Vermutlich weil unter Mac OS 9 gebrannt).

Ich entschied mich, noch nicht aufzugeben, und das Laufwerk an einen Linux-Laptop anzuschliessen. Das war aber gar nicht so einfach: Das Laufwerk machte zwar kurz ein Geräusch, nachdem es an USB angeschlossen wurde, doch die CD wurde nicht eingezogen.

Am USB-Bus wurde das Gerät angezeigt:

# lsusb
...
Bus 002 Device 011: ID 05ac:1500 Apple, Inc. SuperDrive [A1379]
...

Nach etwas Recherche dann die Lösung:

  • (einmalig) # apt-get install sg3-utils
  • (jedes Mal, nachdem das Laufwerk an USB angeschlossen wurde) # sg_raw /dev/sr1 EA 00 00 00 00 00 01 (WICHTIG: Wie ich erst später bemerkte, hätte das Lenovo ThinkPad eigentlich bereits einen DVD-Leser eingebaut gehabt. Dieses Gerät befindet sich unter /dev/sr0, weshalb das Apple-Laufwerk /dev/sr1 erhält)
  • Jetzt sollte man die CD/DVD einschieben können, und das Laufwerk zieht sie ein
  • Mittels # blkid kann man sich die Datenträgerinformationen anzeigen lassen; bei mir bspw. /dev/sr1: BLOCK_SIZE="2048" UUID="2001-02-02-16-03-16-00" LABEL="anzeiger wangen" TYPE="iso9660" PTTYPE="mac"
  • (einmalig) # mkdir /mnt/mac
  • # mount -t iso9660 /dev/sr1 /mnt/mac (falls das nicht klappt, kann man mit dem Parameter -t noch andere Dateisysteme testen, bspw. udf, hfs oder hfsplus Quelle)
  • Nun sollten sich die Ordnerstruktur und die Dateien unter /mnt/mac auflisten lassen
  • Backup, bspw. mit rsync
  • # umount /mnt/mac um das Filesystem zu unmounten
  • # eject /dev/sr1 um die CD auszuwerfen (das Laufwerk verfügt über keinen physischen Auswurfs-Knopf) (Quelle im Kommentar von Korhan Tınaztepe) (Fun fact: # eject /dev/sr0 öffnet die Schublade des ThinkPad-eigenen DVD-Laufwerks)

Quelle: Apple’s SuperDrive tweak for use with Linux, Use Apple’s USB SuperDrive with Linux,

Tags: , , , , , , , , , ,
Labels: Apple, IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 27. November 2022

UniFi kommt auf einem Debian 11 Bullseye nicht hoch

Da am Freitag die SSD in einem meiner Lenovo-Laptops das Zeitliche gesegnet hat, musste ich das System komplett frisch aufsetzen.

Ich verwende diesen Laptop als Site-to-Site OpenVPN-Endpunkt. Mit der Zeit habe ich dort auch andere Software draufgeknallt, zum Beispiel den UniFi Controller zum Management der Netzwerk-Komponenten in der Aussenstation.

Bei der Installation des UniFi Controllers das erste Problem: Debian 11 Bullseye bietet kein MongoDB-Paket (mehr) an:

# apt-get install unifi
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 unifi : Depends: mongodb-server (>= 2.4.10) but it is not installable or
                  mongodb-10gen (>= 2.4.14) but it is not installable or
                  mongodb-org-server (>= 2.6.0) but it is not installable
         Depends: mongodb-server (< 1:4.0.0) but it is not installable or
                  mongodb-10gen (< 4.0.0) but it is not installable or
                  mongodb-org-server (< 4.0.0) but it is not installable
E: Unable to correct problems, you have held broken packages.

Auf einem Referenzsystem war folgende MongoDB installiert:

# dpkg --list | grep -i mongo
ii  mongo-tools                          3.4.14-4                       amd64        collection of tools for administering MongoDB servers
ii  mongodb-clients                      1:3.2.11-2+deb9u2              amd64        object/document-oriented database (client apps)
ii  mongodb-server                       1:3.2.11-2+deb9u2              amd64        object/document-oriented database (server package)

Mittels packages.debian.org fand ich dann rasch heraus, dass diese Pakete in Debian 9 Stretch enthalten waren. Damit ich diese installieren konnte, musste ich /etc/apt/sources.list anpassen:

...
deb         https://debian.ethz.ch/debian/ stretch main non-free
deb-src     https://debian.ethz.ch/debian/ stretch main non-free
...

Damit klappte die Installation von MongoDB und des UniFi Controllers.

Leider kam UniFi nach der Installation aber nicht hoch. Wenn ich die auf dem funktionierenden System gespeicherte URL ansurfte, erschien eine HTTP Status 404 – Not Found Fehlermeldung im Java-Layout:

Nach etwas Recherche und dem Vergleich mit einem baugleichen System an einer anderen Aussenstelle dann die Erkenntnis: Der UniFi Controller läuft ausschliesslich mit Java 8 (Running Unifi Controller on Java 9, 10 and 11). Auf dem neuen Debian hatte ich aber Java 17 (?) installiert gehabt.

Obwohl How can I install Java 8 on Debian 11 (Bullseye)? Hinweise gibt, wie man Java 8 zum Laufen kriegt, wählte ich den einfachsten Weg — über ein offizielles Debian-Paket: Ich hatte nämlich Glück: Den Zugang zu einem offiziellen Java 8-Paket hatte ich mir über die obigen Anpassungen von apt.sources bereits etabliert. Das Paket installierte ich folgendermassen:

# apt-get update
# apt-get install openjdk-8-jre-headless

Da ich noch eine Java 17-Installation auf dem System existieren hatte, war diese als Standardversion eingestellt:

# java --version
openjdk 17.0.4 2022-07-19
OpenJDK Runtime Environment (build 17.0.4+8-Debian-1deb11u1)
OpenJDK 64-Bit Server VM (build 17.0.4+8-Debian-1deb11u1, mixed mode, sharing)

Da ich Java 17 nicht brauchte, entfernte ich das Paket kurzerhand:

# apt-get remove openjdk-17-jre-headless

Wer aber auch auf dieses Paket angewiesen ist, kann folgendermassen Java 8 als Standard auswählen:

# update-java-alternatives --list
java-1.17.0-openjdk-amd64      1711       /usr/lib/jvm/java-1.17.0-openjdk-amd64
java-1.8.0-openjdk-amd64       1081       /usr/lib/jvm/java-1.8.0-openjdk-amd64
# update-alternatives --config java

Anschliessend kam der UniFi Controller hoch. Nun nur noch ein Backup einspielen, und der Controller funktionierte wieder wie vor dem Festplattendefekt.

Tags: , , , , , ,
Labels: Uncategorized

Keine Kommentare | neuen Kommentar verfassen

Samstag, 12. März 2022

Was, wenn man noch eine Weile auf der alten UniFi Controller-Version bleiben möchte?

Kürzlich:

Get:1 http://security.debian.org bullseye-security InRelease [44.1 kB]
Get:2 http://debian.ethz.ch/debian bullseye-backports InRelease [44.2 kB]                      
Hit:3 http://phoscon.de/apt/deconz buster InRelease                                            
Hit:4 https://debian.ethz.ch/debian bullseye InRelease                                         
Hit:5 https://deb.nodesource.com/node_16.x bullseye InRelease                                  
Get:6 https://debian.ethz.ch/debian bullseye-updates InRelease [39.4 kB]                  
Get:7 http://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease [6,772 B]              
Hit:8 https://debian.ethz.ch/debian buster InRelease                                           
Get:10 http://debian.ethz.ch/debian bullseye-backports/main Sources.diff/Index [63.3 kB]
Get:11 http://debian.ethz.ch/debian bullseye-backports/main amd64 Packages.diff/Index [63.3 kB]
Get:12 http://debian.ethz.ch/debian bullseye-backports/main Sources T-2022-03-10-1401.49-F-2022-03-10-0801.51.pdiff [715 B]
Get:12 http://debian.ethz.ch/debian bullseye-backports/main Sources T-2022-03-10-1401.49-F-2022-03-10-0801.51.pdiff [715 B]
Get:13 http://debian.ethz.ch/debian bullseye-backports/main amd64 Packages T-2022-03-10-1401.49-F-2022-03-10-0801.51.pdiff [17.3 kB]
Get:13 http://debian.ethz.ch/debian bullseye-backports/main amd64 Packages T-2022-03-10-1401.49-F-2022-03-10-0801.51.pdiff [17.3 kB]
Get:9 https://dl.ubnt.com/unifi/debian stable InRelease [3,038 B]                             
Reading package lists... Done  
E: Repository 'https://dl.ubnt.com/unifi/debian stable InRelease' changed its 'Codename' value from 'unifi-6.5' to 'unifi-7.0'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.

Die relevante Zeile:

E: Repository 'https://dl.ubnt.com/unifi/debian stable InRelease' changed its 'Codename' value from 'unifi-6.5' to 'unifi-7.0'

Es war aber spätabends und ich war auf keine Experimente mit meinem WLAN aus.

Wie macht man, dass diese Meldung weggeht, und die restlichen, nicht-UniFi Pakete trotzdem aktualisiert werden? Ganz einfach: In /etc/apt/sources.list ersetzt man in der Unifi-Zeile „stable“ mit „oldstable“:

...
deb         http://www.ubnt.com/downloads/unifi/debian oldstable ubiquiti
...

Tags: , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 23. Februar 2022

dhcpd: Unable to add forward map from X to 1.2.3.4: SERVFAIL

Ich habe meine lokalen DHCP-Server so konfiguriert, dass Geräte mit ihrem lokalen DNS-Namen auch in named (BIND9) registriert werden.

Gelegentlich treffe ich folgendes Problem an:

Feb 23 01:15:15 SERVER dhcpd[2746174]: Unable to add forward map from apple-tv.domain.tld. to 10.1.2.3: SERVFAIL

Wie ich mittlerweile nach unzähligen verbratenen Stunden herausgefunden habe hängt dies mit diesem beschissenen AppArmor zusammen. Obwohl ich es jeweils deinstalliere, taucht es nach Updates wieder im System auf.

Die Lösung:

# apt-get remove apparmor
# systemctl stop apparmor
# systemctl disable apparmor

Quelle: How to disable and remove AppArmor in Ubuntu and Debian

Je nach Tageslaune ist dann auch noch ein Reboot nötig.

Mittlerweile habe ich eine monit-Regel eingerichtet, die mich alarmiert, wenn ein solcher Log-Event in /var/log/dhcp.log auftaucht.

(Auf meiner Todo-Liste steht, die Installation mittels apt zu verbieten)

Tags: , , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen