Mein Platz im Internet für Themen wie Linux, BSD, Server, Netzwerk, Knowhow und Besserwisserei

Windows 10 USB Stick unter Linux erstellen


Es ist einfach nicht weg zu bekommen. Dieses olle Windows mit all seinen Unannehmlichkeiten. Eine davon ist, dass es immer wieder etwas zu tun gibt, wenn man von einem USB-Stick installieren möchte oder muss. Natürlich gibt es diverse Tools die einem das abnehmen - aber cool ist was anderes.

Heute stand ich vor der Aufgabe unter Fedora einen solchen USB-Stick zu erstlelen um damit dann einen halbwegs defekten Windows Laptop wieder fertig zu bekommen. Weder einen Windows Rechner oder CD/DVD Laufwerk hatte ich zur hand, also hab ich nach Möglichkeiten gesucht diese Aufgabe zu bewäligen. Bisher hatte ich gute Erfahrungen mit WinUSB gemacht - was nur lange nicht mehr aktualisiert wurde.

Jetzt gibt es da aber einen netten Fork, der das alles wohl wieder richten soll und ich habe mir die Freiheit genommen diesen mail unter meinem Fedora zu installieren. Wie das geht sieht man hier:

  • dnf groupinstall "C-Entwicklungswerkzeuge und -Bibliotheken"
  • mkdir windusb
  • cd windusb/
  • git clone https://github.com/slacka/WinUSB.git
  • cd WinUSB/
  • ./configure
  • make
  • make install

Anschließend ist es mit folgendem Aufruf recht einfach möglich einen dusseligen Windows 10 USB Stick herzustellen. 

  • /usr/local/bin/winusb --format /home/USER/Downloads/ISOs/Win10_1511_1_German_x64.iso /dev/sdc
Schlagwörter Admin, Software, Tools, Windows

Cloning mit dd und ssh


 Rechner von der Hardware zu virtuellen Maschinen umzufunktionieren ist ja mittlerweile eine ziemlich langweilige Aufgabe geworden. Wenn man das ganze allerdings anders herum probiert, dann braucht man zwar keine riesen Hilfsmittel, aber ein wenig Umdenken ist schon gefragt.

In diesem Beitrag  beschreibe ich, kurz und knapp, wie man aus einem eine Festplatte über das Netzwerk auf eine andere (auch gern ein Imagefile) clont.

Genutzt wird dd. Mit Hilfe von dd kann man einen Datenstrom von Blockdevices abgreifen und zum Beispiel in einer Datei speichern. Da es auf diesem Weg funktioniert, funktioniert es auch im Netzwerk mit Hilfe von SSH ziemlich einfach.

Wir greifen einfach die Daten von der Festplatte/dem Image ab

dd if=/mnt/storage/vm1234.raw

und geben es mit einer Pipe an SSH weiter

 | ssh root@111.222.333.444

wo wir es dann an die entgültige Stelle bewegen:

dd of=/dev/sda

Vollständig sieht das dann so aus:

 

dd if=/mnt/storage/vm1234.raw | ssh root@111.222.333.444 dd of=/dev/sda 

Auf diesem Weg kann man dann ziemlich einfach die Daten einer Festplatte/eines Images durch das Netz an einen anderen Ort bewegen, um dort dann zum Beispiel seinen neuen Rechner in Betrieb zu nehmen.

Geholfen hat:

Mit Ansible die Landschaft aktualisieren


Das Ansible für mich der logische nächste schritt nach der Shell ist, sobald es um die Verwaltung von Servern geht, habe ich vielleicht hier und da schon mal durchblicken lassen. Der Hintergrund ist einfach:

  • Es sollte ein Anliegen sein wiederkehrende Arbeitsschritte systematisch gleich durchzuführen
  • Es sollte ein Anliegen sein die zu erledigenden Aufgaben transparent zu halten
  • Es sollte ein Anliegen sein seine Arbeiten reproduzierbar auf andere Systeme anwenden zu können
  • Es macht einfach Spaß, wenn man sich nicht mehr mit dem quatsch der unterschiedlichen Systeme befassen zu müssen.

Mit Ansible Playbooks habe ich als Systemverwalter die Möglichkeit meine Schritte in einfacher Art und Weise (fast schon stenografisch) nieder zuschreiben und so einen Ablauf zu skizzieren, welche Arbeiten/Schritte/Rahmenbedingungen auf dem von mir zu verwaltenden System durchgeführt/vorhanden sein sollen.

Ansible selbst kümmert sich dann um die Abstraktion zum System hin, auf dem ich dann letztendlich die Skizze ausführe.

Wenn ich nun eine gewachsene Landschaft mit unterschiedlichen Linux-Distributionen habe, kann Ansible mir helfen diese aktuell zu halten. Das einfache Playbook dazu sieht wie folgt aus:

---
- hosts: all:!switche:!windows
 user: root
 gather_facts: true

 tasks:
 - name: apt update
 action: apt update_cache=yes
 when: ansible_distribution == "Ubuntu" or ansible_distribution == "Debian"

 - name: apt upgrade
 action: apt upgrade=dist force=yes
 when: ansible_distribution == "Ubuntu" or ansible_distribution == "Debian"

 - name: yum upgrade
 action: yum name=* state=latest
 when: ansible_distribution == "CentOS"

 - name: dnf upgrade
 action: yum name=* state=latest
 when: ansible_distribution == "Fedora"

Wenn ich dieses Playbook nun auf meine Landschaft loslasse:

ansible-playbook playbooks/linux-upgrade.yml

 spielt es keine Rolle mehr, ob die Eingesetzte Distribution ein Debian, Ubuntu, Fedora oder CentOS ist. Alle werden mit den eigenen Paketmanagern aktualisiert