LFS -> Paketmanager

Software besorgen und anwenden
Post Reply
Message
Author
User avatar
!r0nY
Posts: 74
Joined: 20. Aug 2005 13:51

LFS -> Paketmanager

#1 Post by !r0nY »

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

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#2 Post by Lateralus »

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:

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

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?

User avatar
!r0nY
Posts: 74
Joined: 20. Aug 2005 13:51

#3 Post by !r0nY »

Deutsch :D

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
fals das programm jedoch ein anderes verraussetzt, dann steht in der ersten zeile der befehl das script des vorrausgesetzten programmes zu starten
bsp.

Code: Select all

sh /pfad/zu/script
cd /pfad
./configure --prefix=/usr
make
make install
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???

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#4 Post by Lateralus »

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.

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
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":
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.
Der Link ist allerdings veraltet, das wird jetzt vom Berlios verwaltet: http://sorcerer.berlios.de/

User avatar
!r0nY
Posts: 74
Joined: 20. Aug 2005 13:51

#5 Post by !r0nY »

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...

Post Reply