Come creare un pacchetto RPM dai file installati?


8

Esistono due macchine, versione identica / arco di SLES.

Sulla macchina #A è installato un software "pippo" che possiamo vedere usando rpm -qa.

Sulla macchina #B deve essere installato il software "pippo".

Non foo.rpmè disponibile da nessuna fonte, da Internet, ecc.

Domanda

Poiché il pacchetto è foo.rpmstato installato sulla macchina #A, possiamo creare un foo.rpmfile su di esso dai file già installati?

Ci sono anche script pre / post negli rpm, credo. Quindi è possibile installare foo.rpm( con dipendenze? ).


Puoi quasi trovare tutti i pacchetti rpm da qui. rpmfind.net/linux/RPM
Ramesh

Risposte:


11

È possibile ma estremamente difficile farlo in modo che sia fatto correttamente. Se sei disperato, puoi creare un nuovo .specfile RPM e costruire un file RPM (SRPM) di origine "falso" che puoi utilizzare per costruire un file RPM risultante usando rpmbuild --rebuild.

Continuerei invece a cercare l'RPM effettivo. Non affermi quale nella tua domanda, ma è stata la mia esperienza che puoi trovare qualsiasi cosa su Internet se sai come cercarla. Ho trovato versioni antiche di RPM per le distribuzioni di Red Hat che non sono in uso da 10 anni, quindi troverei difficile credere che non ci siano resti di questo RPM da nessuna parte.

Inoltre, spesso è possibile tornare all'origine dell'applicazione contenuta nell'RPM e utilizzarla anche per ricostruire l'RPM. Spesso le app di origine includeranno un .specfile necessario che viene utilizzato per ricostruire l'RPM.

Infine, è possibile ottenere l'origine e il .specfile da un servizio di compilazione come Koji per le distribuzioni basate su Red Hat. SuSE mantiene anche servizi di build simili in modo da poterli cercare per ottenere vecchi manufatti di build.

Prendendo i binari come sono

È possibile utilizzare questo metodo per sollevare gli eseguibili effettivi da un sistema e caricarli per la distribuzione su un altro sistema.

macchina A

$ rpm -ql <packageNameHere> | xargs tar -zcvf /tmp/program.tgz

macchina B

$ tar -zxvf /path/to/your/program.tgz

La versione di RPM di SLES

Secondo uno dei post di questo thread: Ri: Come creare RPM dai pacchetti installati rpm su SLES si presume che abbia lo switch --repackage. Questo non esiste sulla versione Red Hat (in Fedora o CentOS). Ma secondo il post puoi usarlo in questo modo:

$ rpm -e --repackage <somepackage>

Al termine, troverai il tuo RPM accessibile qui:

/var/spool/repackage

Usando rpmerizor

Rpmerizor è uno strumento / script di terze parti che è possibile installare che reimballerà i file di origine in un RPM corrispondente. L'utilizzo di questo script è accessibile qui, intitolato: la pagina man di rpmerizor .

estratto

Rpmerizor è uno script che consente di creare un pacchetto RPM dai file installati. Devi semplicemente specificare i file sulla riga di comando e rispondere ad alcune domande interattive per riempire i metadati rpm (nome del pacchetto, versione ...). Puoi anche usarlo in modalità batch con le opzioni della riga di comando per i metadati.

Utilizzando rpmrebuild

Da non confondere con lo strumento di compilazione rpmbuild, rpmrebuildè un altro script di terze parti che è possibile utilizzare per reimballare un RPM già installato.

estratto

rpmrebuild è uno strumento per creare un file RPM da un pacchetto che è già stato installato in un uso di base, l'uso di rpmrebuild non richiede alcuna conoscenza della costruzione di rpm. (Su debian, il prodotto equivalente è dpkg-repack).

Esempio

Supponiamo di voler riconfezionare openssh-server.

$ rpm -aq | grep openssh-server
openssh-server-6.2p2-8.fc19.x86_64

Ora impacchettalo:

$ rpmrebuild openssh-server-6.2p2-8.fc19.x86_64
/usr/lib/rpmrebuild/rpmrebuild.sh: WARNING: some files have been modified:
..?......  c /etc/ssh/sshd_config
..?......  c /etc/sysconfig/sshd
Do you want to continue ? (y/N) y
Do you want to change release number ? (y/N) n
result: /root/rpmbuild/RPMS/x86_64/openssh-server-6.2p2-8.fc19.x86_64.rpm

Riferimenti


comunque, è: jdk-1.6.0_02-fcs.rpm :) Non è su "internet"
evachristine,

Puoi ottenere RPM ufficiali per qualsiasi versione di JDK da qui: oracle.com/technetwork/java/javase/downloads/… . Questo ti porterà a 1.6u2 che è la stessa versione.
slm

come fai a sapere che "jdk-1.6.0_02-fcs.rpm" è "1.6u2"? : O
evacristina,

1
L'ho trovato!! GRAZIE! è stato chiamato: jdk-6u2-linux-i586.rpm GRAZIE!
evacristina,

1
@evachristine - sì, è quello, felice di averlo risolto.
slm

0

Come regola generale n.

Con un po 'di fortuna rpm -qie rpm -q --changelogfornire informazioni su da dove proviene il pacchetto.

Se è stato creato sul sistema su cui è in esecuzione, è possibile che il file spec sia utilizzato per creare il numero di giri effettivo, se non entrambi.

Come regola generale, non consiglio di copiare file / binari, ma la maggior parte delle meta-informazioni si trova nel database RPM e si hanno i file effettivi.

rpm -q --list <pkg_name> mostra tutti i file distribuiti da un pacchetto.

rpm -q --scripts <pkg_name> per mostrare tutti gli script che vengono eseguiti installando (o rimuovendo) il pacchetto potrebbe fornire almeno una visione del suo scopo tanto quanto i file che vengono distribuiti.

E tutte le dipendenze che devono essere installate possono essere trovate con rpm -q --requires <pkg_name>.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.