Posts Tagged ‘Linux’

Montag, 23. Oktober 2017

Mit Debian Rescue eine CD mounten und auf einen USB-Stick kopieren

Unsere Wohnung ist (fast) eine DVD/CD-ROM-freie Zone. All unsere Endgeräte verfügen mittlerweile über kein optisches Laufwerk mehr.

Doch was nun, wenn man eine CD erhält, deren Daten man auf die Endgeräte laden möchte?

Man nimmt den herumliegenden Lenovo T400 zur Hilfe, welcher noch über ein CD-ROM-Laufwerk verfügt. Leider fehlt der guten Maschine die Festplatte, weil der auf AliExpress.com gekaufte Festplatten-Käfig sowie die Plasticschienen derzeit gerade aus China unterwegs in die Schweiz sind.

Damit man auf der Kiste also ein Linux zum Laufen kriegt, bootet man von einem USB-Stick, auf welchen die Netinst-Version von Debian 9.0 kopiert wurde. (tftp Netzwerk-Boot wäre noch ein Todo für die langen Winternächte).

Nach ein paar Kapriolen, um das Boot-Laufwerk auf USB umzubiegen, startet der Laptop mit der graphischen Installationsoberfläche. Dort wählt man unter Advanced Options den Rescue Modus ein (ohne graphische Benutzeroberfläche).

Nach viel zu vielen Dialogfenster hat man endlich eine Shell zur Hand. Sobald man die CD eingelegt hat, gibt man folgende Befehl ein:

# mkdir /mnt/cdrom
# mount /dev/cdrom /mnt/cdrom

Unter /mnt/cdrom sieht man mit ls -l den Inhalt der CD.

Hat man den zweiten USB-Stick, auf welchen die Daten der CD kopiert werden sollen, bereits bei der Anzeige des Debian-Menus eingestöpselt, könnte man dem Rescue-System in einem Dialog-Fenster sagen, diesen Stick ebenfalls bereits zu mounten.

Hat man dies nicht gemacht, sucht man sich zuerst einen weiteren freien USB-Port am Gerät und steckt den USB-Stick ein.

Anschliessend sucht man sich mit fdisk -l den Devicenamen sowie den Namen der Partition hervor. Gleichzeitig sieht man auch, ob der Stick mit FAT16/32 formatiert ist — ich konnte in meinem Versuch nur solche Sticks mounten.

In unserem Fall trägt die Partition des USB-Sticks den Pfad /dev/sdb1, deshalb mountet man den Stick so:

# mkdir /mnt/usb2
# mount /dev/sdb1 /mnt/usb2

Anschliessend wechselt man auf das CD-Laufwerk und verwendet — leider, da rsync in dieser Umgebung fehlt — folgenden Befehl, um die Daten auf den USB-Stick zu kopieren:

# cd /mnt/cdrom
# cp -R . /mnt/usb2

Doch OBACHT — nur weil der Kopierbefehl abgeschlossen ist, heisst das leider noch nicht, dass alle Daten bereits auf den USB-Stick geschrieben wurden:

USB write: delay between when Ubuntu says its done and it actually being done

Bevor man den USB-Stick ausstöpselt, muss man mit folgendem Befehl sicherstellen, dass auch wirklich restlos alle Daten auf den Stick geschrieben wurden:

# sync

Danach werkelt sync, was locker noch einmal ein oder zwei Minuten dauern kann.

Anschliessend kann man den Stick mit folgendem Befehl für die Entfernung bereitmachen:

# umount /mnt/usb2

Sobald dieser Befehl ausgeführt wurde, kann man den Stick aus dem USB-Port entfernen und auf einem Endgerät einstöpseln.

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

Keine Kommentare | neuen Kommentar verfassen

Samstag, 14. Oktober 2017

Wenn eth0 plötzlich enp1s0 oder ähnlich kryptisch heisst

Heute habe ich einen meiner Lenovo-„Server“ ausgetauscht: T400 raus, T420 rein. Dabei habe ich die SSD vom alten Server in den neuen Server eingebaut — bei Windows ein Ding der Unmöglichkeit, bei Linux: Läuft bei mir (fast).

Leider gab es ein gravierendes Problem, was die Downtime etwas verlängert und an meinem Ehrgeiz gekratzt hat: Die Netzwerk-Interfaces kamen nicht hoch, weshalb das Gerät ohne Intra- und Internet-Verbindung dastand.

Dank Laptop-Tastatur und -Bildschirm fiel immerhin das Debugging leicht.

Die Ausgabe von ifconfig zeigte, dass nur das Loopback-Interface vorhanden war. Was zum Teufel? Den Ethernet-Netzwerkanschluss sah ich mit meinen eigenen Augen vor mir, ein Kabel war eingesteckt und er blinkte auch fröhlich vor sich hin.

# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 184819  bytes 33744666 (32.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 184819  bytes 33744666 (32.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Mit dem Befehl ip a dann die Gewissheit, dass die erwarteten Schnittstellen auch tatsächlich da waren:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.10/24 brd 10.10.10.255 scope global enp1s0
       valid_lft forever preferred_lft forever
3: wlp3s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff

Wie sich herausstellte, hiess auf dem T420 die Netzwerkschnittstelle nicht wie erwartet und üblich eth0, sondern enp1s0.

Der Grund (bitte nicht lachen): Predictable Network Interface Names. Verursacht durch die Datei /etc/udev/rules.d/70-persistent-net.rules, welche bei der Installation auf dem T400 erstellt worden war. Linux fand die darin definierten Interfaces auf dem T420 nicht mehr.

Die Lösung des Problems fand sich in einem Benutzerforum zum Thema How to rename network interface in 15.10?.

An der Originaldatei ...

...
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="11:11:11:11:11:11", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
...

... nahm ich folgende Anpassung vor:

...
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:00:00:00:00:00", NAME="eth0"
...

Wichtig: 11:11:11:11:11:11 ist die MAC-Adresse des Ethernet-Interfaces auf dem T400, 00:00:00:00:00:00 ist die MAC-Adresse des Ethernet-Interfaces auf dem T420. Als ich zuerst nur die MAC-Adresse geändert habe, kam die Netzwerkschnittstelle nicht hoch. Erst die Verschlankung des Eintrags auf die obige Form funktionierte: Nach dem nächsten Reboot war eth0 wieder vorhanden und alle Netzwerkdienste kamen hoch.

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

Keine Kommentare | neuen Kommentar verfassen

Samstag, 14. Oktober 2017

Vergesst Intel NUCs und RPIs als Linux-Server zu Hause

Bei mir im Haushalt habe ich beides stehen:

Einen Raspberry Pi 3, der auf einem 22 Zoll-Bildschirm neben der Wohnungstüre hochkant ein Dashboard mit Zeitzonen, Abfahrten von Trams und Bussen, Temperaturen von Netatmo und Sense Peanut-Sensoren, Wetterprognosen, Twitter-Meldungen, Aktienkurse und Umrechnungskurse anzeigt (vor Jahren inspiriert durch einen Besuch bei Cyon in Basel).

Der Raspberry Pi ist (vermeintlich) günstig, benötigt aber ein Gehäuse und flinke SD-Karten. Immerhin läuft er mit dem Strom eines USB-Ports eines Bildschirms und hat mittlerweile Bluetooth und WLAN direkt eingebaut. Trotzdem ein Gefrickel, was die Installation und Konfiguration angeht. Mit nicht immer zeitnahem Software-Support. Wehe, wenn ein Software-Update fehlschlägt oder eine Fehlkonfiguration ausgerollt wird — viel Spass, die SD-Karte unter macOS zu mounten, die Konfigurationsdateien anzupassen, neu zu booten und das Spiel von vorne zu wiederholen, bis man den wirklich Schuldigen gefunden hat (der DAU an der Tastatur, meistens). Ausserdem ist die Hardware sehr schwachbrünstig (Chrome im Fullscreen lässt ihn fast austicken) und eignet sich nicht für jeden Einsatzzweck.

Andererseits einen Intel NUC, welcher primär Netzwerkaufgaben übernimmt: OpenVPN, DHCP, DNS und UniFi-Controller.

Performance-mässig nichts auszusetzen, aber auf Grund der Dimensionen nicht wartungsfreundlich. Und teuer, weshalb meistens Overkill für Standardaufgaben im heimischen Haushalt.

Mein Tipp: Wer die perfekte Hardware für einen Linux-Server sucht, halte nach älteren, gebrauchten Lenovo-Laptops Ausschau. Auf dem Gebrauchtmarkt kriegt man die Modelle X200, X201 und X220 (12 Zoll-Monitor) sowie T400 und T420 (14 Zoll-Monitor) zwischen 50 und 250 CHF.

Wieso ich auf diese Dinger schwöre?

  • x86 respektive x86_64 Prozessorarchitektur, auf welchem ein hundsnormales Linux ohne irgendwelche Handstände läuft
  • Ausgezeichneter Linux-Treibersupport — das neueste Debian ISO mit Etcher auf einen USB-Stick schreiben, Standardinstallation durschpielen, läuft (abgesehen von der leidigen Geschichte mit den WLAN-Treibern, aber solche Server betreibt man am Ethernet, nicht im WLAN).
  • Günstig
  • Man findet sie auf Ricardo, Tutti und Anibis wie Sand am Meer
  • Eingebaute Tastatur und Bildschirm — Debugging leichtgemacht (man wird nie einen Ersatzbildschirm und eine USB-Tastatur anschleppen müssen, wenn das Ding mal die Netzwerkverbindung verliert)
  • Stromsparend
  • Leise
  • Überhitzen nicht kaum
  • RAM und Festplatten lassen sich problemlos aufrüsten; entweder mit kleinen, flinken SATA SSDs oder aber mit fetten, aber etwas teureren Magnetplatten
  • Funktionieren zugeklappt und nehmen dann etwas mehr als die Fläche eines Papierstapels und die Höhe eines Buches (kein Tolstoi) ein
  • Haben die „USV“ (richtig geraten, die Laptop-Batterie) gleich eingebaut. Und wenn deren Kapazität wegen Memory-Effekten und dergleichen nachlässt: Günstig ersetzbar.
  • Docks findet man auf dem Gebrauchtmarkt auch viele (wobei ich immer noch nicht sicher bin, ob es besser ist, diese Dinger im oder ausserhalb des Docks zu betreiben)

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

Keine Kommentare | neuen Kommentar verfassen

Samstag, 5. Dezember 2015

Den Status eines HP-Druckers mit hplip abfragen

Vor 11 Jahren musste ich mir beim Umstieg meiner IT-Infrastruktur auf Mac OS X auch einen neuen Drucker leisten, welcher Postscript sprach (die Treiberunterstützung für dieses Betriebssystem war damals noch nicht so ausgeprägt wie heute). Ich entschied mich für einen HP LaserJet 1300.

Bis vor einigen Tagen verrichtete dieser im Elternhaus mehr oder wenig zuverlässig seinen Dienst. Doch nun will er nicht mehr drucken und blinkt mit dem LED unten links orange vor sich hin.

Mangels eines LCD-Displays muss der herbeigerufene IT-Supporter auf das Handbuch zurückgreifen, wo er erfährt:

Klappe geöffnet, keine Medien geladen, keine Druckpatrone oder Medienstau

Der Drucker befindet sich in einem Fehlerzustand, der den Eingriff durch den Benutzer erforderlich macht.

Quelle: HP LaserJet 1150 and 1300 Series User Manual

Leider halfen die Empfehlungen des Handbuchs nicht weiter.

Als letzter Ausweg machte ich mich auf die Suche nach einem Linux-basierten Tool, mit welchem man über die USB-Schnittstelle den Status des Geräts auslesen kann. Ich erhoffte mir davon weiterführende Informationen, die mit einem aus drei LEDs bestehenden Bedienfeld nicht an den Benutzer zurückmelden kann.

HP hat zur Administration seiner Drucker unter Linux das hplip-Treiberpaket entwickelt, welches auch unter Debian verfügbar ist:

# apt-get install hplip

Als erstes machte ich den Drucker auf dem USB-Bus ausfindig:

$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 003: ID abcd:0001 Unknown 
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 015: ID 03f0:1017 Hewlett-Packard LaserJet 1300
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Der Drucker ist somit an Bus 3 angeschlossen und das 15. Gerät an dem Bus (?). Die eindeutige USB-ID des Peripheriegeräts lautet 03f0:1017.

Mittels des Tools hp-makeuri fand ich die Device URI heraus, mit welcher man angeblich mit Tools des hplip-Pakets HP-Drucker ansprechen kann:

$ hp-makeuri 001:015

HP Linux Imaging and Printing System (ver. 3.14.6)
Device URI Creation Utility ver. 5.0

Copyright (c) 2001-13 Hewlett-Packard Development Company, LP
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to distribute it
under certain conditions. See COPYING file for more details.

CUPS URI: hp:/usb/hp_LaserJet_1300?serial=000000000000

Done.

Unter cups erfasste ich den Drucker mit der neuen hp:/-Schnittstelle ein zweites Mal.

Anschliessend entdeckte ich das Tool hp-info, das „Device Information Utility“ (unter root, lieber Gott vergebe mir):

# hp-info -i -dhp:/usb/hp_LaserJet_1300?serial=000000000000
warning: hp-info should not be run as root/superuser.

HP Linux Imaging and Printing System (ver. 3.14.6)
Device Information Utility ver. 5.2

Copyright (c) 2001-13 Hewlett-Packard Development Company, LP
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to distribute it
under certain conditions. See COPYING file for more details.


hp:/usb/hp_LaserJet_1300?serial=000000000000

Device Parameters (dynamic data):
  Parameter                     Value(s)                                                  
  ----------------------------  ----------------------------------------------------------
  agent1-ack                    False                                                     
  agent1-desc                   Black toner cartridge                                     
  agent1-dvc                    0                                                         
  agent1-health                 1                                                         
  agent1-health-desc            Not installed                                             
  agent1-hp-ink                 False                                                     
  agent1-id                     0                                                         
  agent1-kind                   4                                                         
  agent1-known                  False                                                     
  agent1-level                  100                                                       
  agent1-level-trigger          0                                                         
  agent1-sku                    Q2613A/Q2613X                                             
  agent1-type                   1                                                         
  agent1-virgin                 False                                                     
  back-end                      hp                                                        
  cups-printers                 ['LaserdruckerHP']                                        
  cups-uri                      hp:/usb/hp_LaserJet_1300?serial=000000000000              
  dev-file                                                                                
  device-state                  1                                                         
  device-uri                    hp:/usb/hp_LaserJet_1300?serial=000000000000              
  deviceid                      MFG:Hewlett-Packard;CMD:PJL,MLC,BIDI-ECP,PCL,POSTSCRIPT,PC
                                LXL;MDL:hp LaserJet 1300;CLS:PRINTER;DES:Hewlett-Packard  
                                LaserJet 1300;MEM:72MB;COMMENT:RES=10x1;1;                
  duplexer                      1                                                         
  error-state                   102                                                       
  host                                                                                    
  in-tray1                      1                                                         
  in-tray2                      1                                                         
  is-hp                         True                                                      
  media-path                    1                                                         
  panel                         0                                                         
  panel-line1                                                                             
  panel-line2                                                                             
  photo-tray                    0                                                         
  port                          1                                                         
  r                             0                                                         
  revision                      254                                                       
  rg                            000                                                       
  rr                            000000                                                    
  rs                            000000000                                                 
  serial                        000000000000                                              
  status-code                   1805                                                      
  status-desc                   No toner                                                  
  supply-door                   1                                                         
  top-door                      4                                                         

Model Parameters (static data):
  Parameter                     Value(s)                                                  
  ----------------------------  ----------------------------------------------------------
  align-type                    0                                                         
  clean-type                    0                                                         
  color-cal-type                0                                                         
  copy-type                     0                                                         
  embedded-server-type          0                                                         
  fax-type                      0                                                         
  fw-download                   False                                                     
  icon                          hp_LaserJet_1200.png                                      
  io-mfp-mode                   6                                                         
  io-mode                       1                                                         
  io-support                    6                                                         
  job-storage                   0                                                         
  linefeed-cal-type             0                                                         
  model                         hp_LaserJet_1300                                          
  model-ui                      HP LaserJet 1300                                          
  model1                        HP LaserJet 1300 Printer                                  
  model2                        HP LaserJet 1300t Printer                                 
  monitor-type                  0                                                         
  panel-check-type              1                                                         
  pcard-type                    0                                                         
  plugin                        0                                                         
  plugin-reason                 0                                                         
  power-settings                0                                                         
  pq-diag-type                  0                                                         
  r-type                        0                                                         
  r0-agent1-kind                4                                                         
  r0-agent1-sku                 Q2613A/Q2613X                                             
  r0-agent1-type                1                                                         
  scan-src                      0                                                         
  scan-type                     0                                                         
  status-battery-check          0                                                         
  status-dynamic-counters       0                                                         
  status-type                   9                                                         
  support-released              True                                                      
  support-subtype               14214                                                     
  support-type                  2                                                         
  support-ver                   0.9.5                                                     
  tech-class                    ['LJMono', 'Postscript']                                  
  tech-subclass                 ['Normal']                                                
  tech-type                     3                                                         
  usb-pid                       4119                                                      
  usb-vid                       1008                                                      
  wifi-config                   0                                                         

Done.

Die wichtigsten Infos waren in folgenden Zeilen enthalten:

  error-state                   102                                                       
  status-code                   1805                                                      
  status-desc                   No toner                                                  

Am Tag bevor ich diesen Blog-Artikel abfasste hiess es noch:

  error-state                   101                                                       
  status-code                   1806                                                      
  status-desc                   Service request                                           

Wie dem auch sei, eine Lösung für das Problem habe ich immer noch nicht gefunden. Ich habe aber nun entschieden, das Gerät in den Ruhestand zu senden und stattdessen einen HP LaserJet Pro M426fdw zu bestellen.

Tags: , , , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 16. August 2015

XPS-Dateien unter Mac OS X zu PDF konvertieren

… scheint mit quelloffener Software auf der Kommandozeile nicht — oder nur unter grösserem Aufwand — möglich zu sein: MacPorts hat dieses Paket nicht im Angebot (Nachtrag: Homebrew hingegen schon).

Ich bin deshalb auf meinen Linux-Server ausgewichen:

# apt-get install apt-get install libgxps-utils

Anschliessend konnte ich die XPS-Datei mit folgendem Befehl umwandeln:

$ xpstopdf datei.xps

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

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 5. März 2015

Ist ein bestimmtes Debian-Paket von einer Sicherheitslücke betroffen?

In den letzten Tagen kam es knüppelhart: Zuerst meldeten die PHP-Entwickler eine Sicherheitslücke in der unserialize()-Funktion (CVE-2015-0273), tags darauf mussten die Leute hinter Samba ein schwerwiegendes Problem in ihrer Software anerkennen (CVE-2015-0240).

Wie gehe ich sicher, dass auf meinem Debian-Server zu Hause Pakete installiert sind, in welchen diese Sicherheitsprobleme bereits behoben wurden?Nach einer kurzen Google-Suche fand ich die Antwort:

Im Debian Security Tracker kann ich nachschauen, welche Pakete von welchen „Common Vulnerabilities and Exposure“ betroffen sind. In den beiden erwähnten Fällen lauten die URLs auf die Detailseite folgendermassen:

Die dort angegebenen Versionsnummern kann ich anschliessend auf meinem Server mittels folgendem Befehl überprüfen:

$ dpkg --list | grep php
...
ii  php5                                 5.6.5+dfsg-2                         all          server-side, HTML-embedded scripting language (metapackage)
...

5.6.5+dfsg-2 ist immer noch anfällig auf das Problem, da die Sicherheitslücke offenbar erst mit 5.6.6+dfsg-2 behoben ist. Nebenbei: Mehr zum Kürzel „dfsg“.

Deshalb führe ich folgenden Befehl aus:

# apt-get upgrade php5
...
Calculating upgrade... php5 is already the newest version.
...

Offenbar muss ich mich also noch ein wenig in Geduld üben.

Bei Samba schaut es folgendermassen aus:

$ dpkg --list | grep samba
...
ii  samba                                2:4.1.17+dfsg-1                      i386         SMB/CIFS file, print, and login server for Unix
...

4.1.17+dfsg-1 wird auf der Web-Site als „fixed“ geführt. Glück gehabt!

Tags: , , , ,
Labels: IT

Keine Kommentare | neuen Kommentar verfassen

Donnerstag, 7. November 2013

Die gängigsten Unix-Kommandozeilen-Tools unter Windows

Welcher Linux-Benutzer kann unter Windows schon auf nützliche Kommandozeilen-Tools wie cat, cut, sed, awk, tr und Konsorten verzichten? Das Complete package, except sources der CoreUtils for Windows rüstet unter Windows die gängigsten Linux-Kommandos nach.

Damit Windows nach der Installation die Linux-Befehle aber auch wirklich findet, muss der Pfad zu den ausführbaren Dateien in die Windows-Umgebungsvariable PATH aufgenommen werden. Dies geschieht folgendermassen:

  1. Computer
  2. Systemeigenschaften
  3. Erweitert
  4. Umgebungsvariablen…
  5. Path
  6. Bearbeiten…

An den String fügt man den Pfad C:\Program Files (x86)\GnuWin32\bin; (Windows 7 mit 64-bit CPU) respektive C:\Program Files\GnuWin32\bin; an.

Sobald man nun die Windows-Kommandozeile öffnet, hat man die ganze Palette an Befehlen zur Hand …

… ausser grep!

Dieses muss man als eigenständiges Installationspaket von derselben Web-Site herunterladen und installieren:

Grep for Windows

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

Keine Kommentare | neuen Kommentar verfassen

Sonntag, 3. November 2013

(Aus dem Archiv) Remove Apple-specific files

Der vorliegende Artikel habe ich ursprünglich irgendwann einmal ab 2002 auf meinem damaligen Linux-Entwicklungsserver im Web publiziert. Da ich das bloggen erst 2005 entdeckt habe, waren die Tipps in einer grossen HTML-Seite untergebracht. Anlässlich einer Aufräumaktion auf dem Server habe ich mich entschieden, die „Perlen“ über meine heutige Kommunikationsplattform ins Web zu posaunen. Seitdem ich die Artikel verfasst habe, sind viele Tage ins Land gegangen — ob der Artikel noch Gültigkeit hat, entscheidet der geneigte Leser selber.

.DS_Store contains information on how to display folders; e.g. list view. Such files are of no use for Linux- and Windows-users. The following command finds all .DS_Store-files in the current directory and every subdirectory and deletes it immediately. I put it in a cron-job, which is performed every five minutes.

find . -type f -name .DS_Store -exec rm -f '{}' ';'

The next thing is about these fucking Resource Forks. If I could, I would travel back through time and eliminate the person who created it. Anyway, they’re among us now, and we can’t get rid of’em. Well, at least they serve no needs on a Linux-server, so it’s (usually) safe to delete them. As example, if you drag photos from iPhoto to a Samba-Share, not only the JPGs are stored, but also ._-files with thumbnails in it. Well then, good bye little bastards:

find . -type f -name ._* -exec rm -f '{}' ';'

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

Keine Kommentare | neuen Kommentar verfassen

Mittwoch, 18. September 2013

Den Raspberry Pi mit rsync über SSH auf die Synology DiskStation sichern

Als Gedankenstütze nachfolgend einige Lösungen für Probleme, die sich mir in den Weg stellten:

Mac OS X

$ ssh-keygen -t rsa -b 2048 -f id_rsa_dashboard_vault

Die Aufforderung, ein Passwort für den Private Key zu generieren, bestätigt man mit ENTER — der Private Key wird so nicht zusätzlich mit einem Passwort geschützt, weil dies den automatisierten Login von Raspberry Pi auf die DiskStation verhindern würde.

Der Befehl erstellt zwei Dateien:

  • id_rsa_dashboard_vault
  • id_rsa_dashboard_vault.pub

Synology DiskStation

Als erstes richtet man sich über die Web-Oberfläche einen normalen Benutzer dashboard ein, in dessen Home-Verzeichnis die Backup-Daten geschrieben werden.

Hierzu müssen dem Benutzer Schreibrechte auf /homes gegeben werden. Ansonsten sieht man sich beim Starten des Backup-Scripts (s. unten) mit folgender Fehlermeldung gegenüber:

ERROR: module is read only

Quelle: Rsync over ssh: “ERROR: module is read only” suddenly appeared

Wichtig ist weiter, dass der SSH-Zugang über die Web-Oberfläche aktiviert wurde.

/etc/passwd

Dem neu erstellten Benutzer müssen wir nun eine gültige Login-Shell zuweisen:

...
dashboard:x:1029:100::/var/services/homes/dashboard:/bin/ash

Erfasst man hier ein nicht existierendes Login-Shell, kriegt man beim Debugging des publickey SSH-Logins folgende komische Infos ans Gesicht geworfen:

...
Authentication succeeded
...
Permission denied
...

Um sicher zu gehen, dass die Login-Shell richtig konfiguriert ist, macht man als auf der DiskStation eingeloggter User root folgendes:

# su dashboard

Wechselt man in ein neues Shell, ist /etc/passwd korrekt konfiguriert.

/var/services/homes/dashboard/.ssh/authorized_keys

In dieser Datei legen wir den Public Key ab (id_rsa_dashboard_vault.pub).

/etc/ssh/sshd_config

Wahrscheinlich müsste man hier gar nichts anpassen, beim Debugging habe ich es dann doch getan (wohl unnötigerweise):

$ cat sshd_config | grep -v "^#" | sort
AllowTcpForwarding no
AuthorizedKeysFile	.ssh/authorized_keys
ChallengeResponseAuthentication no
ChrootDirectory none
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_rsa_key
LogLevel INFO
Match User root
    AllowTcpForwarding yes
Protocol 2
PubkeyAuthentication yes
Subsystem       sftp    internal-sftp -f DAEMON -u 000
SyslogFacility AUTH
UseDNS no
UsePAM yes

Raspberry Pi

/root/.ssh/config

Host vault
   Hostname 10.0.44.44
   User dashboard
   IdentityFile ~/.ssh/id_rsa_dashboard_vault

In der Datei ~/.ssh/id_rsa_dashboard_vault legt man den Private Key ab.

Login überprüfen

Dies sollte nun ohne Eingabe eines Passwortes möglich sein:

$ ssh vault

Bei einer Fehlermeldung helfen die Optionen -v, -vv und -vvv weiter:

$ ssh -v vault

/usr/local/bin/backup.sh

Folgendes Script sichert / (root) des Raspberry Pis auf den Host vault in den Pfad /volume1/homes/dashboard/backups/. Auf dem Raspberry Pi nicht mehr vorhandene Dateien werden auf der DiskStation gelöscht.

#!/bin/sh

RSYNC=`which rsync`

if [ ! -e "$RSYNC" ]
then
	echo "rsync binary not found: '$RSYNC'"
	exit 1
fi

TODAY=`date +"%F_%T"`
SNAPSHOTFILE="/var/log/rsync/$TODAY.snapshot.txt"
#touch "$SNAPSHOTFILE"
echo "$TODAY" > "$SNAPSHOTFILE"

if [ ! -f "$SNAPSHOTFILE" ]
then
	echo "Could not create snapshotfile '$SNAPSHOTFILE'"
else
	echo "Snapshotfile created at:"
	ls -l "$SNAPSHOTFILE"
fi

LOGFILE="/var/log/rsync/$TODAY.log.txt"
EXCLUDEFILE="/usr/local/bin/backup-exclude.txt"

SOURCE="/"
DEST="vault:/volume1/homes/dashboard/backups/"

echo "Running rsync ..."
$RSYNC -avz --log-file="$LOGFILE" --exclude-from="$EXCLUDEFILE" --delete -e ssh "$SOURCE" "$DEST" 
echo "Backup complete."

exit 0

/usr/local/bin/backup-exclude.txt

proc/*
sys/*
dev/*
tmp/*
run/*
mnt/*

Quelle: Can a Raspberry Pi be used to create a backup of itself?

/etc/crontab

...
4 0 * * *	root	/usr/local/bin/backup.sh

Hiermit wird das Backup-Script täglich um 4 Uhr morgens ausgeführt.

Links

Tags: , , , ,
Labels: Linux

1 Kommentar | neuen Kommentar verfassen

Mittwoch, 20. März 2013

Mit scp eine Datei mit Leerschlägen im Dateinamen kopieren

Das geht ganz einfach — sobald man herausgefunden hat, wie man den Pfad aufschreiben muss:

scp user@server:"'/Movies/Documentaries/The Power Of Nightmares/Documentary.The.Power.Of.Nightmares.01.Baby.Its.Cold.Outside.avi'" ~/Desktop

Konkret: Man schliesst den Pfad in Anführungszeichen und Apostrophs ein: „‚[pfad]'“ (Achtung: WordPress wandelt die Anführungszeichen in diesem Paragraphen in typographische ansprechende Zeichen um — was aber leider zur Folge hat, dass Copy & Paste der Zeichen in ein Shell-Fenster nicht mehr funktioniert).

Via Spaces and SCP

Tags: , , ,
Labels: Linux

Keine Kommentare | neuen Kommentar verfassen