• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

RPM erstellen: Installationspfad vom Benutzer angeben lassen

qauser2

Newbie
Hallo zusammen,

ich habe ein tar.gz-File, dass mit Hilfe von einem selbst gebauten RPM-Paket (mit rpmbuild) in ein Verzeichnis entpackt werden soll. In meinem spec-File habe ich das bislang so gemacht:

Code:
...
%install
tar xfvz $RPM_SOURCE_DIR/archiv.tar.gz -C /home/bspuser/bspordner/
...

=> was muss ich machen, damit das "Installations"-Verzeichnis vom Benutzer bei der RPM-Installation angeben werden kann :???: ???

Vielen Dank!!
 

Appleonkel

Hacker
Auch wenn ich nicht weiss, was das soll. Du müsstest in der %prep section eine Benutzereingabe abfangen, solche Sachen werden aber üblicherweise nach /opt installiert. Du kannst auch die Shell Variablen benutzen.

Wie gesagt der Sinn erschließt sich mir nicht ...
 

oc2pus

Ultimate Guru
rpm -i --relocate /usr=$HOME/usr <paketname>

oder

rpm -i --prefix $HOME/meinverzeichnis <paketname>

oder

mit mc das rpm irgendwohin entpacken, dann bleibt die Struktur erhalten. Aber ob es dann noch funktioniert etc ...

besser ein wrapper-script schreiben welches beim ersten Start des Programmes alles von /usr/share/paketname nach $HOME/<paketname> verschiebt/verlinkt

Beispiel, so ein script installieren, beim ersten Aufruf stellt es fest, das es das locale Verzeichnis nicht gibt und kopiert/verlinkt die Dateien aus /usr/share
!/bin/bash
# create local working directory
if [ ! -d \$HOME/.%{name} ]; then
mkdir -p \$HOME/.%{name}

# link the resources to local dir
ln -s %{_datadir}/%{name}/Media \$HOME/.%{name}
# config should be user writeable
cp %{_datadir}/%{name}/*.cfg \$HOME/.%{name}
touch \$HOME/.%{name}/%{version}
fi
# just in case some new files appear (update)
ln -sf %{_datadir}/%{name}/Media \$HOME/.%{name}

# call binary from local working-directory
cd \$HOME/.%{name}
%{_bindir}/\$1
EOF

die "\" sind nötig wenn du das script im spec-file selber erzeugst, ansonsten ohne.

mit dem touch auf die Versionsnummer kannst du spätere updates einfach gestalten und gegegenfalls weite Datein kopieren, löschen umbennen etc
 

Unruhe

Newbie
Hallo zusammen

Habe zurzeit ein änliches problem.

Versuche wie verzweifelt im spec.file auf den Prefix zuzugreiffen, dieser wird bei der Installation mit.
Code:
rpm -i --prefix /opt/Test/ tmp/TS-APP/TS-APP-2.4.4-0.i586.rpm
angepasst.

Das Problem ist ich habe im %post bereich links die gesetzt werden.

Code:
mkdir /var/log/truesign
ln -f -s /var/log/ts /opt/kn/ts/log
ln -f -s /opt/ky/ts/ts.sh  /etc/init.d/ts
ln -f -s /etc/init.d/ts /etc/init.d/rc3.d/S99ts
ln -f -s /etc/init.d/ts /etc/init.d/rc3.d/K99ts

anstelle der /opt solte eben nun der Prefix verwended werden.

Code:
ln -f -s /var/log/ts %{prefix}/kn/ts/log

Die installation wird so in den neuen prefix bereich erstellt, aber die Links nicht umgebogen da in prefix noch der alte Wert steckt.

Wie kann das realisiert werden? Dachte auch schon an eine Benutzerabfrage während der Installation. allerdings wird dan die read -t (int) Funktion nicht ausgeführt, beziungsweisse das Time out wird übergangen.

Bin um jede Hilfe oder Denkanstos dankbar.

Gruss
 

}-Tux-{

Hacker
Auch wenn der Thread schon etwas aelter ist...
Unruhe schrieb:
Code:
ln -f -s /var/log/ts %{prefix}/kn/ts/log

Die installation wird so in den neuen prefix bereich erstellt, aber die Links nicht umgebogen da in prefix noch der alte Wert steckt.
Das ist auch korrekt so, da die Macros waehrend des Builds substituiert werden. Das kannst du auch sehen, wenn du dir das %post Script des fertigen RPMs anschaust (rpm -qp --scripts /path/to/rpm).

Unruhe schrieb:
Wie kann das realisiert werden? Dachte auch schon an eine Benutzerabfrage während der Installation. allerdings wird dan die read -t (int) Funktion nicht ausgeführt, beziungsweisse das Time out wird übergangen.
Das ist eine denkbar schlechte Idee - solche "Experimente" in %post bzw. %pre Scripts koennen zu ziehmlichen Problemen fuehren.


}-Tux-{
 
Oben