Hallo,
ich habe schon einmal nach einem paketmanager für mein lfs system gesucht und bin aber nicht fündig geworden, nun habe ich mich dazu entschlosse selbst ein paketmanagement system zu erstellen. bis jetzt sieht es so aus, dass ich die sourcen aus blfs verwende, für diese hab ich mir jeweils ein install script erstellt und jetzt steh ich vor dem problem mit den abhängigkeiten, wie stell ich das an, dass wenn ich programm a installieren will, dieses aber programm b als grundlage vorraussetzt, dass dann auch programm b zuerst installiert wird.
ich hab das so angestellt, dass aus dem script von programm a als erstes das script von programm b aufgerufen wird, nach meiner logik sollte ja dann prog b installiert werden, aber das wird es nicht.
habt ihr vielleicht eine idde wie ich etwas anders machen könnte/sollte????
danke
LFS -> Paketmanager
Hi, hat's mit pkg_src nicht funktioniert?
So wie du es darstellst, klingt es doch richtig. Es wäre vielleicht vernünftig, zu jedem Quellcode-Paket eine Datei mit einer Liste von Abhängigkeiten zu haben.
Ruby-Code:
Ruby macht wahrscheinlich keinen Sinn, da das ja schon einiges an Paketen voraussetzt, aber ich habe vor kurzem in "The Art of Unix Programming" von einem Packetsystem in Bash-Skript gelesen - ich schicke den Link, sobald ich ihn finde.
Das von Crux schein auch ganz nett zu sein:
http://crux.nu/Main/Handbook2-2#ntoc24
In welcher Sprache schreibst du?
So wie du es darstellst, klingt es doch richtig. Es wäre vielleicht vernünftig, zu jedem Quellcode-Paket eine Datei mit einer Liste von Abhängigkeiten zu haben.
Ruby-Code:
Code: Select all
class Package
def initialize(filename)
@name = filename.gsub(".tar.bz2", "")
@depfile = "#{@name}.deps"
@deps = read_deps
end
def read_deps
deps = Array.new
fp = File.open(@depfile, "r")
fp.each_line do |line|
deps.push(line.gsub(/$\s*/, "")
end
return deps
end
def install
@deps.each do |package_filename|
tmp_dep = Package.new(package_filename)
tmp_dep.install
end
# tar -zxf @filename -C /tmp && cd /tmp/#{@filename.gsub(".tar.gz", "") ...
end
end
mypackage = Package.new(ruby-1.8.2.tar.bz2)
mypackage.install
Das von Crux schein auch ganz nett zu sein:
http://crux.nu/Main/Handbook2-2#ntoc24
In welcher Sprache schreibst du?
Deutsch
also pkg-src hat mich nicht so vom hocker gerissen, ausserdem habe ich meinen eigenen datenpool (aus blfs) und irgendwo reizt es mich doch schon selbst soetwas auf die beine zustellen...
also ich ich habe das mit einem einfachen bash-script gemacht ...nichts weltbewegendes.
inhalt des scripts:
fals das programm jedoch ein anderes verraussetzt, dann steht in der ersten zeile der befehl das script des vorrausgesetzten programmes zu starten
bsp.
und ich glaube da liegt der fehler...
es ist halt nur eine überlegung gewesen, die nach meiner logik eigentlich hätte funktionieren müssen...
was könntest du mir denn für ein tipp geben in welcher sprache ich es schreiben sollte und wie ich das am besten angehen kann???
also pkg-src hat mich nicht so vom hocker gerissen, ausserdem habe ich meinen eigenen datenpool (aus blfs) und irgendwo reizt es mich doch schon selbst soetwas auf die beine zustellen...
also ich ich habe das mit einem einfachen bash-script gemacht ...nichts weltbewegendes.
inhalt des scripts:
Code: Select all
cd /pfad/
./configure --prefix=/usr
make
make install
bsp.
Code: Select all
sh /pfad/zu/script
cd /pfad
./configure --prefix=/usr
make
make install
es ist halt nur eine überlegung gewesen, die nach meiner logik eigentlich hätte funktionieren müssen...
was könntest du mir denn für ein tipp geben in welcher sprache ich es schreiben sollte und wie ich das am besten angehen kann???
Ich weiß nicht so recht. Es ist nahe-liegend es in Shellskript zu schreiben:
- komfortable (im Vergleich zu C)
- Benötigt wenig bereits installierte Software (im Vergleich zu Perl, Python, Ruby, ...)
Wie du es eingerichtet hast, müsste es meiner Ansicht nach auch funktionieren... Vielleicht ein paar Debugging-Meldungen einbauen und weitersehen.
Ich würde es aber nach dem Konzept von oben machen: Eine Datei seperat halten, welche die Abhängigkeiten der jeweiligen Software als Liste beinhaltet. Danach wäre interessant, wie man es hinbekommt, zu notieren, welche Dateien bei einem bestimmten Paket installiert werden:
Das ginge so, aber es ist wirklich stressig: Zunächst wird die Software woanders installiert.
Wenn allerdings die Dateien nur woanders installiert werden, sonst jedoch identisch sind, so kann man sie dann auch einfach manuell kopieren.
Also hier erstmal die Info aus "The Art of Unix Programming":
- komfortable (im Vergleich zu C)
- Benötigt wenig bereits installierte Software (im Vergleich zu Perl, Python, Ruby, ...)
Wie du es eingerichtet hast, müsste es meiner Ansicht nach auch funktionieren... Vielleicht ein paar Debugging-Meldungen einbauen und weitersehen.
Ich würde es aber nach dem Konzept von oben machen: Eine Datei seperat halten, welche die Abhängigkeiten der jeweiligen Software als Liste beinhaltet. Danach wäre interessant, wie man es hinbekommt, zu notieren, welche Dateien bei einem bestimmten Paket installiert werden:
Das ginge so, aber es ist wirklich stressig: Zunächst wird die Software woanders installiert.
Code: Select all
cd /src/wget-1.10
./configure --prefix=/tmp/pkg/wget-1.10
make
make install
cd /tmp/pkg/wget-1.10
find . -type f /var/pkgdb/wget-1.10.files
find . -type d /var/pkgdb/wget-1.10.dirs
rm -r /tmp/wget-1.10
cd /src/wget-1.10
make clean
configure --prefix=/usr
make
make install
Also hier erstmal die Info aus "The Art of Unix Programming":
Der Link ist allerdings veraltet, das wird jetzt vom Berlios verwaltet: http://sorcerer.berlios.de/Case Study: Sorcery Linux
Sorcerer GNU/Linux is a Linux distribution that you install as a small, bootable foothold system just powerful enough to run bash(1) and a couple of download utilities. With this code in place, you can invoke Sorcery, the Sorcerer package system.
Sorcery handles installing, removing, and integrity-checking software packages. When you “cast spells”, Sorcery downloads the source code, compiles it, installs it, and saves a list of files that were installed (along with a build log and checksums for all the files). Installed packages can be “dispelled” or removed. Package listing and integrity checks are also available. More details are available at the Sorcery project site (http://sorcerer.wox.org/).
The Sorcery system is written entirely in shell. Program installation procedures tend to be small, simple programs for which shell is appropriate. In this particular application, the main drawback of shell is neutralized because Sorcery's authors can guarantee that the helper programs they need will be present in the foothold system.
habe bis jetzt nur vorkenntnisse in der datenverarbeitung mit turbopascal, wie kann ich denn mit der schell datensätze zeilen weise aus einer datei lesen oder in eine datei schreiben (schreiben geht doch glaube ich mit cat > /pfad/datei << "EOF" - bin nicht sicher). wie könnte ich zum beispiel ein script schreiben, das aus einer datei bis zu einer bestimmten stelle liest?
hatte mir das so gedacht, das ich eine datei mit den installations anweisung habe, diese zu beginn eine datei abruft, welche die abhängigkeiten der verschiedenen programme enthält und nach installations prozess werden alle abgehandelten programme in eine weitere datei geschrieben, die dann sozusagen die information enthält welche programme schon installiert sind.
hoffe ihr könnt mein gedanken wirrwar versthen und mir helfen...
hatte mir das so gedacht, das ich eine datei mit den installations anweisung habe, diese zu beginn eine datei abruft, welche die abhängigkeiten der verschiedenen programme enthält und nach installations prozess werden alle abgehandelten programme in eine weitere datei geschrieben, die dann sozusagen die information enthält welche programme schon installiert sind.
hoffe ihr könnt mein gedanken wirrwar versthen und mir helfen...