Domanda

Va bene, quindi dopo aver tentato di inseguire le dipendenze per vari tipi di software per il n-th tempo e replicare il lavoro che varie persone fanno per tutte le diverse distribuzioni Linux che vorrei sapere se c'è un modo migliore di raggruppare vari pezzi di software in un file .rpm o .deb File per una distribuzione più semplice.

La mia attuale configurazione per fare questo è un mostro di Frankenstein di vari strumenti, ma principalmente vagabulto e libguestfs, costruito dalla fonte in esecuzione a Fedora perché nessuna delle distribuzioni lo spedisce effettivamente con virt-diff. Ecco i passaggi che segui attualmente:

    .
  1. Spinga un sistema operativo base utilizzando una casella vagabrante o crea uno da Live CD.
  2. Esporta il .vmdk e chiamalo base-image.
  3. Spinga una replica esatta dell'immagine precedente e vai in città: usa il gestore del pacchetto, O qualche altro mezzo, per scaricare, compilare, installare tutti i pezzi di cui ho bisogno. Ancora una volta, esporta il .vmdk e chiamalo non-base-image.
  4. Effettuare entrambe le immagini di base disponibili al sistema operativo Guest Fedora che ha libguestfs.
  5. Utilizzare virt-diff a diff Le due immagini e dumano che i dati da file chiamati diff.
  6. Esegui diversi script rubini per massaggiare diff in un altro formato che contiene le informazioni di cui ho bisogno e nessuna schifo che non mi piacciono le cose in /var.
  7. Esegui un altro script per generare uno script per guestfish con un grappolo di comandi copy-out.
  8. Esegui lo script guestfish.
  9. Esegui un altro script per rigenerare i link simboloni da diff perché guestfish non può farlo.
  10. Ruota la struttura della cartella risultante in un file .deb o .rpm e spedisca.
  11. Mi piacerebbe sapere se c'è un modo migliore per farlo. Penseresti che ci sarebbe stato ma non l'ho capito.

È stato utile?

Soluzione

Considererei sicuramente qualcosa sulla falsariga di:

a)

    .
  • Elenco yum (seleziona i tuoi pacchetti / dipendenze qualunque)
  • Usa yumdownloader sull'elenco precedente (o utilizzare i pkgs che hai già scaricato)
  • cratereepo
  • Ship on Media con lo script di installazione che aggiunge il repo del CD a repolista, ecc.

o b)

Primi due passaggi come sopra, quindi imballare i rpm in un archivio costruire un pacchetto che contiene tutto quanto sopra e calcia l'installazione effettiva degli RPM (lungo le linee di RPM -UVH / TMP / REPO / *) comeUno script in ritardo (nella fase di pulizia, forse).Dunno Se questo può essere fatto evitando le serrature sul database RPM.

Altri suggerimenti

È il problema principalmente quello di garantire che i tuoi clienti abbiano installato tutti i pacchetti di distro standard upstream necessari per il tuo pacco da eseguire?

Se questo è il caso, credo che la soluzione più semplice sarebbe quella di sfruttare l'infrastruttura yum e APT per avere quegli strumenti che tracciano e installare i pacchetti prerequisiti necessari.

Se si fornisce un repository YUM / APT nativo con specifiche pre-req complete (il duro lavoro che hai apparentemente già completato). Quindi lo strumento di installazione del sistema standard si prende cura del resto. Vedi link qui sotto per ulteriori informazioni sulla creazione di un repository personale per yum / apt.

Per i clienti off-line, è possibile fornire i supporti con il tuo software e un specchio - o mirror sottoinsieme - della distribuzione upstream e istruzioni per aggiungerle a yum config / apt config .

yum Creazione di un repository yum nel Guida alla distribuzione Fedora

APT Come configurare un repository debian sul wiki debian

Penso che tu abbia raggiunto il punto di complessità - Infatti un mostro di Frankenstein - dove dovresti smettere di temere di fare pacchetti adeguati con le dipendenze.Abbiamo fatto questo nel mio precedente lavoro - abbiamo avuto un set di pacchetti RPM fabbricati - ed è stato molto facile e semplice, tra cui:

    .
  • Script pre / post installazione
  • Disinstalla gli script
  • Dipendenze

Non abbiamo mai dovuto fare nulla che hai appena descritto.E per il cliente, installare anche un insieme di pacchetti è stato molto facile!

È possibile seguire un manuale di riferimento di Come creare il pacchetto RPM per ulteriori informazioni.

Modifica: Se è necessario un singolo pacchetto di installazione, quindi creare questo pacchetto master, che conterrebbe tutti gli altri pacchetti (con le dipendenze impostate correttamente) e le installate nello script post-install (eLi disinstallato nello script di disinstallazione).

Ci sono principalmente 3 passaggi per creare un pacco con tutte le dipendenze (lascia che sia un, B & C).

a. Raccogliere i file richiesti.
Ci sono molti modi per raccogliere file del software principale e le sue dipendenze. Al fine di ottenere tutti i dipendenti e per eseguire errori è necessario utilizzare un sistema operativo base (I.e Live System) 1. Utilizzo di AppDirassistant
Questa app viene utilizzata da www.portablelinuxapps.org per creare una directory app portatile. Scansiona e guardano i file accessibili dall'app per trovare richiesto.
2. Utilizzo di Chroot & Overlayfs
In questo metodo non è necessario avviare il cd live invece chroot in esso.
un. Montare il .iso @ / cdrom e
b. Montare il filesystem (filesystem.squashfs) @ Un altro posto, per esempio @ / tmp / union / root c. Bind Mount / Proc @ / TMP / Union / Root / Proc
d. Sovrapposizione su di esso mount -t overlayfs overlayfs /tmp/union/root -o lowerdir=/tmp/union/root,upperdir=/tmp/union/rw
. e. Chroot. chroot /tmp/union/root

Ora è possibile installare i pacchetti usando Apt-Get o un altro metodo (solo dal terminale chrooted). Tutti i file modificati sono memorizzati @ /tmp/union/rw. Porta i file da lì.
3. Usando pacchetti raccolti manualmente Utilizzare il gestore del pacchetto per raccogliere le dipendenze. Per esempio apt-get install package --print-uris stampierà il download uris per i pacchetti DEP. Utilizzando questo URIS Scarica pacchetti ed estrai tutto (dpkg -x 1.deb ./extracted).

b. Pulire i file della spazzatura
Dopo la raccolta di file rimuovi i file indesiderati

c. Pack Files
. 1. Utilizzo di AppimageasSistance
Se hai raccolto manualmente i file, è necessario copiare il file AppName.Desktop da ./USR/Share/applications alla radice dell'albero della directory. Copia anche il file denominato APPUNTO da un'altra app o estraela da AppDirassistance.
2. Creare un .deb o .rpm utilizzando i file raccolti.

Quindi i tuoi clienti non installeranno mai nessun altro software che potrebbe specificare una versione diversa di tali dipendenze che stai camminando dappertutto, giusto?

Perché non solo creare la tua distribuzione se hai intenzione di andare così lontano?

O puoi semplicemente dare loro un sacco di pacchetti e un singolo script che fa rpm -i dep1 dep2 yourpackage

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top