Hallo.
Viele Debian/Ubuntu/Abwandlung davon-Benutzer werden es wohl kennen: Man hat ein kleines Programm geschrieben und möchte es mit anderen teilen.
Das geht natürlich auch recht einfach, man kann den Sourcecode rausgeben oder sowas wie ein Installer-Skript bauen.
Ich habe jetzt auf einer Seite von IBM über Debian-Pakete etwas tolles gefunden: Ein .deb-Paket bauen ohne viel Stress und viel Konfigurationsdatei-Editieren und neues-Programm-Installieren; mit dpkg ganz allein. Mit einem einzigen Befehl, und man muss nur eine einfache Datei anlegen - und es ist auch egal in welcher Sprache das Programm geschrieben ist, egal ob Bash, Python, C/C++, C#, Assembler oder was auch immer! Das ganze ist aber wohl eher für kleinere Sachen, für richtig große Projekte sollte man wohl doch lieber die “profesionelle” Version nehmen…
Aber wie gesagt, für kleine Sachen reicht es alle mal (theoretisch sind auch große Sachen kein Problem).
Man muss nur die Dateien wie im Dateisystem anordnen. Das heißt im Folgenden:
Einen neuen Ordner erstellen.
Darein wechseln und zum Beispiel die Unterordner usr und usr/bin erstellen. Dann da die ausführbaren Dateien reinkopieren.
Wenn man ‘ne Manpage hat, einfach bis usr/share/man/man1/ erstellen und dann die myapp.1 reinkopieren. Und so weiter, einfach den Unterschied zwischen $(Programm nicht installiert) und $(Programm installiert) festhalten.
Bei größeren Sachen könnte man dann zB beim ./configure durchlaufen als Präfix statt /usr einfach ~/myapp/usr mitgeben, also
./configure --codefix=~/myapp/usr
(das hab’ ich noch nicht getestet, aber warum sollte es nicht gehen?).
Wenn man dann in ~/myapp alles hat was man brauch (chmod muss natürlich auch angepasst sein, aber beim einfachen Kopieren passt das schon), die control-Datei erstellen (und nur diese, sonst nichts weiteres).
Eine control-Datei kann zum Beispiel so aussehen:
Package: vdown
Version: 0.4.2
Section: web
Priority: optional
Architecture: all
Essential: no
Depends: wget
code-Depends:
Recommends: ffmpeg
Suggests:
Installed-Size: 32
Maintainer: Max Mustermann <max@mmann.tld>
Conflicts:
Replaces:
Provides: vdown
Description: vdown downloads videos from video sharing websites like YouTube, MySpace Video, Google Video, Clipfish and so on. The script uses <videograb.de>. Videos will be saved as FLV file, you will be asked if you want to encode it with ffmpeg to MPEG.
Eigentlich alles selbsterklärend. Bemerkungen:
- Bei Section gehen zum Beispiel “web” oder “sound”, “x11″, “python”, “text” und so weiter. Siehe Ubuntu-Paket-Seite. Da einfach die Links und Beschreibungen angucken.
Bei kompilierten Programmen muss man halt u.U. i386, amd64 oder ppc angeben.
- Essential sollte wohl bei “no” bleiben ![]()
- Bei “Depends” die Pakete auflisten, die das Programm zwingend braucht.
- Bei “Recommends” zum Beispiel Programme, die den Funktionsumfang des Programmes erweitern.
- Bei “Suggests” zum Beispiel Dokumentation.
- Die “Installed-Size” ist in KB anzugeben, man kann sie mit
cd ~/myapp && du -k
rausfinden.
- “Maintainer” ist ja klar.
- “Conflicts”; Pakete die nicht mit installiert sein dürfen.
- “Replaces”: Pakete, die von dem Programm ersetzt werden (zum Beispiel bei Engines)
- “Provides”: Paketname
- “Description”: Eine kurze Beschreibung.
Die Datei dann als ~/myapp/DEBIAN/control speichern.
SPÄTER HINZUGEFÜGT
Um ein Icon ins GNOME/KDE/XFCE-Menü hinzuzufügen, muss man in usr/share/applications eine .desktop-Datei erstellen.
Beispiel:
Name: skype.desktop
Inhalt:
[Desktop Entry]
Encoding=UTF-8
Name=Skype
Comment=Skype Internet Telephony
Exec=skype
Icon=skype.png
Terminal=false
Type=Application
Categories=Network;Application;
Man kann noch andere Namen für andere Sprachen hinzufügen, einfach unter Name=X ein Eintrag mit Name[de]=Y (dasselbe beim Kommentar).
Das Icon muss in usr/share/pixmaps/ liegen.
Bei der Kategorie einfach mal bei den vorhandenen Einträgen spicken falls man sich unsicher ist.
Ins Homeverzeichnis wechseln und mit
dpkg -b ~/myapp myapp-0.4.2_all.deb
das .deb-Paket erstellen.
Ein Beispiel für so einen myapp-Ordner: *klick*
Beispiel für eine control-Datei als Text: *klick*
Beispiel für ein Skript, dass Videos von Youtube, Google Video, Clipfish und so weiter runterläd, als .deb (”vdown”): *klick*
Ich hoffe, das hier hat jemandem geholfen ![]()