Hallo,
für den Selbstbau einer NAS nutze ich eingefleischter Windows-Nutzer
neuerdings ein Linux-Derivat, in dem Fall OpenMediaVault basierend auf
Debian.
Was ich nicht verstehe: Wie werden Programme unter Linux installiert ?
Unter Windows lade ich von der Herstellerseite eine setup.exe oder
*.msi-Datei, doppelklicke darauf und die Installation läuft.
Unter Linux werden 'Pakete' genutzt und z.B. mit apt-get installiert.
Das prinzipielle Vorgehen ist mir schon klar, offene Fragen sind:
- angenommen ich würde ein Programm veröffentlichen wollen, wie bekomme
ich das denn überhaupt in so eine Paketquelle aufgenommen? Was müßte ich
machen, wenn ich Updates herausgebe ?
- um meine Windows-Programme im Falle von Neuinstallationen nicht jedes
Mal von neuem irgendwo herunterladen zu müssen, habe ich sie auf einer
externen Festplatte abgespeichert. Ist soetwas unter Linux total
unüblich? Interessante Programme müßte ich dann nach Möglichkeit als
*.deb archivieren?
> Ist soetwas unter Linux total> unüblich?
Nein. Paketarchive lassen sich wunderbar z.B. firmenintern sowohl auf
einem eigenen, lokalen Paketserver hörten als auch offline auf
HD/CD/DVD vorhalten.
Was meinst Du wie Debian im letzten Jahrhundert verteilt wurde, als die
Leitung nach Hause so knapp 56kbit/s her gab? Genau: Paketarchive auf n
CDs, abgegriffen per apt-get / dpkg> Interessante Programme müßte ich dann nach Möglichkeit als> *.deb archivieren?
Jagenau, kann man so machen. Aber vergiss nicht die Abhängigkeiten der
Pakete untereinander zu berücksichtigen...
Markus schrieb:> - um meine Windows-Programme im Falle von Neuinstallationen nicht jedes> Mal von neuem irgendwo herunterladen zu müssen, habe ich sie auf einer> externen Festplatte abgespeichert. Ist soetwas unter Linux total> unüblich? Interessante Programme müßte ich dann nach Möglichkeit als> *.deb archivieren?
Wenn man ueber eine Internetverbindung verfuegt, ist es unueblich.
Die Pakete werden haeufig aktualisiert, ausserdem ist das Herunterladen
von "irgendwo" nur in Ausnahmefaellen noetig.
1
apt-get install PAKET
holt sich das richtige Paket passend zur restlichen Installation und die
Pakete, die es braucht und installiert alle diese.
Etwas naeher an WIN ist
1
aptitude
noch naeher ist eine graphische Oberflaeche dazu. Da gibt es dann auch
wieder Klickibunti.
wendelsberg
Markus schrieb:> Hallo,>> für den Selbstbau einer NAS nutze ich eingefleischter Windows-Nutzer> neuerdings ein Linux-Derivat, in dem Fall OpenMediaVault basierend auf> Debian.>> Was ich nicht verstehe: Wie werden Programme unter Linux installiert ?>> Unter Windows lade ich von der Herstellerseite eine setup.exe oder> *.msi-Datei, doppelklicke darauf und die Installation läuft.>> Unter Linux werden 'Pakete' genutzt und z.B. mit apt-get installiert.> Das prinzipielle Vorgehen ist mir schon klar, offene Fragen sind:>> - angenommen ich würde ein Programm veröffentlichen wollen, wie bekomme> ich das denn überhaupt in so eine Paketquelle aufgenommen? Was müßte ich> machen, wenn ich Updates herausgebe ?>> - um meine Windows-Programme im Falle von Neuinstallationen nicht jedes> Mal von neuem irgendwo herunterladen zu müssen, habe ich sie auf einer> externen Festplatte abgespeichert. Ist soetwas unter Linux total> unüblich? Interessante Programme müßte ich dann nach Möglichkeit als> *.deb archivieren?
wenn Du *.deb packages runtergeladen hast, kannst du mit
1
sudodpkg--install*.deb
die entsprechende packages (mit Root rechte häufig) installieren
Markus schrieb:> - um meine Windows-Programme im Falle von Neuinstallationen nicht jedes> Mal von neuem irgendwo herunterladen zu müssen, habe ich sie auf einer> externen Festplatte abgespeichert.
Funktionieren die mit einem Windows, auf dem sie nicht installiert
wurden, dann noch? Stichwort Registryeinträge und ähnliches.
Reinhard S. schrieb:> Funktionieren die mit einem Windows, auf dem sie nicht installiert> wurden, dann noch? Stichwort Registryeinträge und ähnliches.
er meint den Installer.
Die meisten Programme kann man aber auch so kopieren, sie legen ihre
Einträge beim ersten Start an.
Markus schrieb:> - angenommen ich würde ein Programm veröffentlichen wollen, wie bekomme> ich das denn überhaupt in so eine Paketquelle aufgenommen? Was müßte ich> machen, wenn ich Updates herausgebe ?
Du veröffentlichst den Sourcecode Deines Programms unter einer Lizenz
die Deine Distribution (hier Debian) als Open Source ansieht.
Entweder findet sich dann ein Debian-Mitarbeiter, der das Programm für
Debian packaged und maintained und damit dann in die Debian-Distribution
mit aufnimmt. Oder Du wirst selbst Mitglied bei Debian und machst das.
Alternativ kannst Du es auch selbst packagen und selbst bei Dir hosten.
Dann muss der Nutzer die URL Deines Servers bei sich als Paketquelle
hinzufügen bevor er das Programm installieren kann.
Bei anderen Distributionen läuft es ähnlich.
wendelsberg schrieb:> Etwas naeher an WIN istaptitude
Viele Programme werden auch als .tar.gz geliefert, das muss man
auspacken und erhält eine .run-Datei, die man auf ausführbar setzen muss
(und natürlich alle anderen Rechte wie benötigt). Diese Datei kann man
dann ausführen wie eine setup.exe, ist nur halt viel umständlicher und
geht auch oft schief.
Georg
Georg schrieb:> wendelsberg schrieb:>> Etwas naeher an WIN istaptitude>> Viele Programme werden auch als .tar.gz geliefert, das muss man> auspacken und erhält eine .run-Datei, die man auf ausführbar setzen muss> (und natürlich alle anderen Rechte wie benötigt). Diese Datei kann man> dann ausführen wie eine setup.exe, ist nur halt viel umständlicher und> geht auch oft schief.
So einen ScheiXX will man nicht haben.
Auf eine saubere Linux-Installation gehören ausschließlich Programme,
die vom Package-Management-System betreut werden. Bei einem
Debian-basierten Linux also .deb Pakete.
In seltenen Ausnahmefällen kann man Programme nach /opt oder /usr/local
installieren oder einzelne(!) executables nach $HOME/bin kopieren.
Allerdings entfallen damit die Vorteile des Packaging-Systems:
- Upgrades (manuell oder automatisch)
- automatisches Handling von Abhängigkeiten
- Archivierung/Mergen von Konfigurationsänderungen
Du kannst programme per Hand oder über einen Paketmanager (dpkg,
aptitude, apt-get) in dein system ein pflegen.
Du könntest z.B. einfach ein binary nach /usr/bin/ kopieren, das ist
aber ein ziemlicher hack und würde ich dir nicht empfehlen. Hierbei
müsstest du dich komplett manuell über die updates kümmern, was
eigentlich der job des paketmanagers ist.
Jeder paketmanager hat seine quellen irgendwo, bei debian ist das primär
das /etc/apt/sources.list file.
Dort kannst du z.b auch einen eigenen paketserver eintragen.
Das dein paket in den standard repos landet wird sehr schwer sein, es
gibt bei debian da einen guide, aber wie gesagt, lass das mal bei seite.
Wenn du Deine Software ein paar Jahre lang entwickelt hast und eine
große Nutzeranzahl hast schauts natürlich anderst aus.
Sonst wird software auch meist als .rpm, .deb oder .tar.gz verteilt,
diese werden dann entweder über den paketmanager (rpm und deb) oder
manuell (tar.gz) im system eingebracht.
Axel S. schrieb:> Auf eine saubere Linux-Installation gehören ausschließlich Programme,> die vom Package-Management-System betreut werden. Bei einem> Debian-basierten Linux also .deb Pakete.
Ich bin gerade nicht ganz sattelfest, da meine Debian/Ubuntu Zeit schon
etwas her ist, aber das hat immer noch den großen Nachteil das der
paketmanager keine updates einspielen wird oder? Eine automatische
Anpassung der sources.list erfolgt ja nicht. Der Vorteil besteht
lediglich darin, dass das paket (und Abhängigkeiten) sauber gehandhabt
werden.
Markus schrieb:> Unter Windows lade ich von der Herstellerseite eine setup.exe oder> *.msi-Datei, doppelklicke darauf und die Installation läuft.>> Unter Linux werden 'Pakete' genutzt und z.B. mit apt-get installiert.
Nur bei debian und Derivaten. Andere Distributionen nutzen meist andere
Packetformate/Packetmanager, falls diese einen haben.
> Das prinzipielle Vorgehen ist mir schon klar, offene Fragen sind:>> - angenommen ich würde ein Programm veröffentlichen wollen, wie bekomme> ich das denn überhaupt in so eine Paketquelle aufgenommen? Was müßte ich> machen, wenn ich Updates herausgebe ?
Du kanst immer selbst ein Repository und/oder andere Methoden zur
Installation anbieten.
Im fall von debian basierten Distributionen ersetzt du das Packet in
deinem repo einfach durch das neuere, welches eine neuere version haben
muss. Das nächste mal, wenn der Benutzer dann mit apt-get update und
apt-get upgrade das system aktualisiert, bekommt er dann das neuere
(sofern er es nicht mit apt-mark hold verhindert oder das Packet neue
Abhängigkeiten bekommen hat, die dieser noch nicht installiert hat).
Willst du dein Programm in die offiziellen Repos bekommen, musst du
zuerst schauen, ob es dazu eine standardprozedur gibt. Danach sollte man
sich mit den Distributoren in verbindung setzen. Meisst gibt es
Mailinglisten und IRC chats für Distributionen/Entwickler/etc. Gerade
bei IRC kann man schnell mal etwas nachfragen und die wichtigen Leute
etwas kennen lernen. Am Ende ist es dann ganz den Distributoren
überlassen, ob sie das Packet aufnehmen wollen, oder nicht.
> - um meine Windows-Programme im Falle von Neuinstallationen nicht jedes> Mal von neuem irgendwo herunterladen zu müssen, habe ich sie auf einer> externen Festplatte abgespeichert. Ist soetwas unter Linux total> unüblich?
Ich habe dafür einen lokalen mirror auf meinem Server in meinem Hais,
der mir alle Packete regelmässig herunter läd. Den verwende ich dan als
repo für die PCs in meinem haus.
Ich habe auch ein PXE boot environment, bei dem das gesamte System auf
einen readonly NFS Server ist, wodurch ich eigentlich keine lokale Linux
installation mehr bräuchte.
Grundsätzlich ist es auch möglich, Programme auf externe Festplatten zu
installieren, debian basierte Systeme sind jedoch eigentlich nicht dafür
vorgesehen, bzw. dass man die Festplatte entfernt ist nicht vorgesehen.
Ich denke um zu verstehen wie man Programme auf externe Datenträger
installiert, muss man ersteinmal verstehen, was alles passiert wenn man
eins ausführt. Wenn du in der shell einen Befehl eingibst, sucht es an
jedem Ort, der in der Umgebungsvariable PATH angegeben ist, nach einer
ausfürbaren Datei die so heisst wie der Befehl. Dann wird diese Datei
ausgeführt. Dabei muss diese eventuell noch Libraries laden*. Dabei wird
an orten wie lib /usr/lib/, etc. gesucht. Mit der LD_LIBRARY_PATH
Umgebungsvariable kann man ändern, wo nach libraries gusucht wird. Falls
jedoch beim linken der Anwendung der Pfad der Library fest angegeben
wurde, hilft dass nicht weiter.
Wenn man also Anwendungen an einen anderen Ort packen will, genügt es
meistens, dieses und seine abhängigkeiten an den Wunschort zu kopieren,
und danach einfach beim Starten den PATH und den LD_LIBRARY_PATH
anzupassen. Dies ist aber sehr aufwendig und fehleranfällig.
Eine andere möglichkeit ist, falls möglich, das Programm beim
Kompillieren so statisch zu linken, dass es nachher keine anderen
abhänigkeiten mehr hat. Man hat dann eine Standalone anwendung.
Man kann auch ein Vollständiges linux System in einen Ordner auf der
externen festplatte packen. Unter debian systemen kann man dafür z.B.
debootstrap verwenden. Danach kann man mit chroot, oder mittels
containertechnologie (kernel namespaces) in dieses system und darin
Programme ausführen.
Was auch noch wichtig sein könnte: wenn du auf debian systemen in der
/etc/apt/sources.list auch angegeben hasst, dass du auch die quell
listen willst (deb-src), kannst du mit apt-get source die quellen holen.
Mit apt-get build-dep kannst du die build dependencies instalieren (sind
nicht immer vollständig). Mit debuild kannst du es dann kompilieren. Das
kann nützlich sein, wenn man z.B. ein installationsprefix im packet
einrichten will (meistens debian/rules anpassen dass --prefix=/irgendwo
übergeben wird) Denke einfach daran, dass wen du etwas an einen ort mit
apt installierst, und diesen dann entfernst, apt nicht weiss dass etwas
fehlt. So kann man sich schnell das System kaputt machen.
> Interessante Programme müßte ich dann nach Möglichkeit als> *.deb archivieren?
Kommt drauf an, was du damit vor hast.
* stark vereinfacht, siehe ld.so für details:
http://man7.org/linux/man-pages/man8/ld.so.8.html
Manche Programme kann man auch einfach irgendwohin kopieren und von dort
ausführen, sofern die Abhängigkeiten installiert sind oder entsprechend
mit dorthin kopiert wurden.
Oder man schaut ob es die gewünschte Applikation als AppImage gibt. Dort
sind alle Abhängigkeiten mit drin und die Images können direkt
ausgeführt werden.
In beiden Fällen gilt:
Axel S. schrieb:> Allerdings entfallen damit die Vorteile des Packaging-Systems:>> - Upgrades (manuell oder automatisch)> - Archivierung/Mergen von Konfigurationsänderungen
Michael K. schrieb:> Oder man schaut ob es die gewünschte Applikation als AppImage gibt. Dort> sind alle Abhängigkeiten mit drin und die Images können direkt> ausgeführt werden.
Jo, das ist quasi das was Windows seit 20 Jahren immer macht: einfach
alles reinwerfen. Hat seine Nachteile insb. bezüglich
Sicherheitsupdates, aber funktioniert halt. Für die Entwickler ist es
unter Windows furchtbar so einen Installer zu erstellen und unter Linux
noch furchtbarer ... aber es funktioniert halt. Dass man für alles ein
Debian-Paket hat was auch noch für die Debian-Version gebaut ist die da
grad zufällig rumfliegt ist für nicht-Standard-Kram eine ziemliche
Traumwelt ...
Am ehesten hat man da noch eine Chance mit irgendwie CentOS 6, das
bleibt halt 10 Jahre gleich.