Nachdem ich ein kleines Script angepassst hatte, wollte ich dieses in ein DEB-Paket überführen. Da ich zu diesem Zeitpunkt nur einen Windows 10 PC mit WSL zur Verfügung hatte wollte ich diesen, eigentlich trivialen Job, dort ausführen.
Beim Aufruf des Befehls kam es zu einer Fehlermeldung, die ich so nicht erwartet hatte…
#Befehl zur Erstellung des DEB-Pakets
dpkg-deb --build tolles_script_0.1
dpkg-deb: error: control directory has bad permissions 777 (must be >=0755 and <=0775)
Ist ja kein Problem, schnell die Dateirechte entsprechend angepasst und nochmal versucht…Pustekuchen. Zwar scheint das Ändern der Rechte mittels „chmod“ grundlegend zu funktionieren, jedoch läuft der Befehl weiterhin auf die gleiche Fehlermeldung.
„chmod“ selbst meldet dabei jedoch keine Probleme.
Schnell vermute ich die WSL als Ursache und tatsächlich scheint es dort „Optimierungsbedarf“ zu geben. Auch Microsoft hat das erkannt und hält einen entsprechenden Artikel in der WSL-Dokumentation parat.
Advanced settings configuration in WSL | Microsoft Docs
Das Verhalten des WSL lässt sich anhand einer Konfigurationsdatei an die Erfordernisse anpassen. Dazu muss die entsprechende Datei erstellt und mit den gewünschten Optionen befüllt werden.
#erstellen der WSL-Konfigdatei
nano /etc/wsl.conf
Der Dateizugriff unter Linux und Windows ist grundsätzlich verschieden, Windows „versteht“ die vom Subsystem gesetzten Optionen nicht und kann diese somit auch nicht abbilden.
Beim überfliegen der Dokumentation fällt einem folgende, standardmäßig deaktivierte Einstellung auf.
Parameter | Beschreibung | Standardwert |
metadata | Whether metadata is added to Windows files to support Linux system permissions | disabled |
Das klingt genau nach dem was wir suchen. Die Einstellung setzt man anschließend in der Konfigurationsdatei.
#wsl.conf Beispielkonfiguration
[automount]
enabled = true
root = /mnt/
options = "metadata"
Nach der Aktivierung der Option ist es notwendig das Linux-Subsystem einmal komplett neu zustarten. Am schnellsten geht das mittels Neustart des Dienstes mit der Powershell. Achtung: Hierfür sind Administratorrechte notwendig. Sind diese nicht vorhanden, ist auch ein Neustart des PCs möglich!
#Neustart des WSL-Dienstes in Powershell
Get-Service LxssManager | Restart-Service
Anschließend setzen wir die Dateiberechtigungen erneut:
chmod 755 tolles_script_0.1/DEBIAN/ && chmod 755 tolles_script_0.1/DEBIAN/control
Zuletzt wird der Befehl zur Erstellung des DEB-Paketes neu ausgeführt. Und siehe da, keine Fehlermeldung mehr und ein hoffentlich funktionsfähiges DEB-Paket.
dpkg-deb --build tolles_script_0.1
dpkg-deb: building package 'tolles_script_0.1' in 'tolles_script_0.1.deb'
Als WSL nutze ich übrigens Kali Linux. Ich bin mir aber sicher, dass das Problem auch bei anderen Distributionen auftritt.