Pagina 1 di 2
[Risolto] Pacchetto slackware da rpm
Inviato: gio 29 mar 2012, 13:47
da N1cuz
Volevo fare un pacchetto .txz da un .rpm, non volevo usare il tool rpm2tgz perchè l'rpm mette tutto in /usr/share ed io volevo invece mettere tutto sotto /opt, ho fatto quindi uno slackbuild usando il tool rpm2cpio ecc... non mi chiaro però come creare i link simbolici al binario in /usr/bin, le icone in /usr/share/icons ecc.. Non posso farlo direttamente nello slackbuild, devo usare un doinst.sh immagino?
Re: Pacchetto slackware da rpm
Inviato: gio 29 mar 2012, 14:50
da hashbang
I link simbolici li puoi gestire così:
Mettiamo che il file pippo.jpg andrà in /usr/share/pixmaps e dovrà essere symlinkato in /opt/share/pixmaps
Nello SlackBuild (e quindi anche direttamente da terminale) dai:
Codice: Seleziona tutto
ln -sf /usr/share/pixmaps/pippo.jpg /path/temporaneo/di/pacchettizzazione/opt/share/pixmaps/pippo.jpg
In questo modo crei un link simbolico apparentemente corrotto (in quanto punta ad un file inesistente). Quando darai il makepkg esso si renderà conto che esiste un symlink ed aggiungerà al doinst.sh (creato al momento dallo stesso makepkg) la riga
Codice: Seleziona tutto
(cd /opt/share/pixmaps; rm pippo.jpg; ln -sf /usr/share/pixmaps/pippo.jpg)
La subshell si occuperà di eliminare il symlink corrotto e di inserire quello definitivo corretto.

Re: Pacchetto slackware da rpm
Inviato: gio 29 mar 2012, 19:46
da N1cuz
hashbang ha scritto:I link simbolici li puoi gestire così:
Mettiamo che il file pippo.jpg andrà in /usr/share/pixmaps e dovrà essere symlinkato in /opt/share/pixmaps
Nello SlackBuild (e quindi anche direttamente da terminale) dai:
Codice: Seleziona tutto
ln -sf /usr/share/pixmaps/pippo.jpg /path/temporaneo/di/pacchettizzazione/opt/share/pixmaps/pippo.jpg
In questo modo crei un link simbolico apparentemente corrotto (in quanto punta ad un file inesistente). Quando darai il makepkg esso si renderà conto che esiste un symlink ed aggiungerà al doinst.sh (creato al momento dallo stesso makepkg) la riga
Codice: Seleziona tutto
(cd /opt/share/pixmaps; rm pippo.jpg; ln -sf /usr/share/pixmaps/pippo.jpg)
La subshell si occuperà di eliminare il symlink corrotto e di inserire quello definitivo corretto.

Grazie mille hash (una volta eri atomix600 per caso?) odesso provo e ti faccio sapere l'esito...
Re: Pacchetto slackware da rpm
Inviato: gio 29 mar 2012, 19:51
da hashbang
la mia firma ha scritto:formerly known as atomix600
Stando alla mia firma, direi di si

Re: Pacchetto slackware da rpm
Inviato: gio 29 mar 2012, 21:27
da N1cuz
Per quanto riguarda i symlink tutto ok, ora l'unico problema che mi rimane è che non trova lo slack-desc, perchè lo cerca in root /slack-desc...
Codice: Seleziona tutto
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
ho controllato la directory di lavoro ed è corretta
Codice: Seleziona tutto
/home/nico/linuxqq
cat: /slack-desc: No such file or directory
Re: Pacchetto slackware da rpm
Inviato: gio 29 mar 2012, 23:05
da N1cuz
risolto prendendo spunto da uno slackbuild di alienbob:
Codice: Seleziona tutto
SRCDIR=`dirname $0`
[ "${SRCDIR:0:1}" == "." ] && SRCDIR=${CWD}/${SRCDIR}
Il problema rimane la creazione dei symlink, vengono creati e poi rimossi, vengono rimossi anche i file a cui dovrebbero linkare:
Codice: Seleziona tutto
Searching for symbolic links:
opt/linuxqq/bin/qq -> /usr/bin/qq
opt/linuxqq/share/applications/linuxqq.desktop -> /usr/share/applications/linuxqq.desktop
opt/linuxqq/share/tencent/qq/qq.png -> /usr/share/icons/qq.png
Making symbolic link creation script:
( cd opt/linuxqq/bin ; rm -rf qq )
( cd opt/linuxqq/bin ; ln -sf /usr/bin/qq qq )
( cd opt/linuxqq/share/applications ; rm -rf linuxqq.desktop )
( cd opt/linuxqq/share/applications ; ln -sf /usr/share/applications/linuxqq.desktop linuxqq.desktop )
( cd opt/linuxqq/share/tencent/qq ; rm -rf qq.png )
( cd opt/linuxqq/share/tencent/qq ; ln -sf /usr/share/icons/qq.png qq.png )
It is recommended that you make these lines your new installation script.
Would you like to make this stuff the install script for this package
and remove the symbolic links ([y]es, [n]o)? y
Removing symbolic links:
removed `./opt/linuxqq/bin/qq'
removed `./opt/linuxqq/share/applications/linuxqq.desktop'
removed `./opt/linuxqq/share/tencent/qq/qq.png'
Creating your new ./install/doinst.sh...
... Ci ributto un occhio
Re: Pacchetto slackware da rpm
Inviato: gio 29 mar 2012, 23:06
da N1cuz
hashbang ha scritto:la mia firma ha scritto:formerly known as atomix600
Stando alla mia firma, direi di si


Re: Pacchetto slackware da rpm
Inviato: gio 29 mar 2012, 23:42
da N1cuz
è proprio sbagliato il symlink, mi butta in /opt/linuxqq/bin/ il link a /usr/bin invece dell'opposto, e poi rimuove l'eseguibile, adesso aono anche abbastanza cottura tra l'altro:
Codice: Seleziona tutto
# link al menù
cd $PKG/opt/$PRGNAM/share/applications
ln -sf /usr/share/applications/linuxqq.desktop linuxqq.desktop
cd -
# link al binario eseguibile
cd $PKG/opt/$PRGNAM/bin
ln -sf /usr/bin/qq qq
cd -
# link all'icona
cd $PKG/opt/$PRGNAM/share/tencent/qq/
ln -sf /usr/share/icons/qq.png qq.png
cd -
Re: Pacchetto slackware da rpm
Inviato: ven 30 mar 2012, 9:55
da hashbang
N1cuz ha scritto:Per quanto riguarda i symlink tutto ok, ora l'unico problema che mi rimane è che non trova lo slack-desc, perchè lo cerca in root /slack-desc...
Codice: Seleziona tutto
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
ho controllato la directory di lavoro ed è corretta
Codice: Seleziona tutto
/home/nico/linuxqq
cat: /slack-desc: No such file or directory
La variabile $CWD l'hai dichiarata? Il fatto che non riconosca $CWD, rendendo di fatto il path /slack-desc, invece di $CWD/slack-desc, mi fa pensare a questo.
Se non l'hai dichiarata, metti questa dichiarazione:
Il problema rimane la creazione dei symlink, vengono creati e poi rimossi
makepkg li rimuove quando crea il pacchetto, se il parametro -l viene settato con l'argomento "y".
man 8 makepkg ha scritto:Options
-l, --linkadd y|n
If y, add any symbolic links found to the install script (doinst.sh) and delete them. This is the recommended action. If this option is not used, makepkg will prompt if symbolic links are found.
vengono rimossi anche i file a cui dovrebbero linkare
Questo è strano. Dopo aver creato il pacchetto, dai un:
e controlla se i file sono presenti.
Re: Pacchetto slackware da rpm
Inviato: ven 30 mar 2012, 14:41
da N1cuz
hashbang ha scritto:N1cuz ha scritto:Per quanto riguarda i symlink tutto ok, ora l'unico problema che mi rimane è che non trova lo slack-desc, perchè lo cerca in root /slack-desc...
Codice: Seleziona tutto
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
ho controllato la directory di lavoro ed è corretta
Codice: Seleziona tutto
/home/nico/linuxqq
cat: /slack-desc: No such file or directory
La variabile $CWD l'hai dichiarata? Il fatto che non riconosca $CWD, rendendo di fatto il path /slack-desc, invece di $CWD/slack-desc, mi fa pensare a questo.
Se non l'hai dichiarata, metti questa dichiarazione:
Si l'avevo dichiarata, e non ho capito come mai il path è /slack-desc, sembra che pwd restituisca / ma non è così perchè ho controllato, lavora nella directory corrente...
Il problema rimane la creazione dei symlink, vengono creati e poi rimossi
makepkg li rimuove quando crea il pacchetto, se il parametro -l viene settato con l'argomento "y".
man 8 makepkg ha scritto:Options
-l, --linkadd y|n
If y, add any symbolic links found to the install script (doinst.sh) and delete them. This is the recommended action. If this option is not used, makepkg will prompt if symbolic links are found.
vengono rimossi anche i file a cui dovrebbero linkare
Questo è strano. Dopo aver creato il pacchetto, dai un:
e controlla se i file sono presenti.
Spariscono tutti i file a cui faccio (vorrei far) puntare i symlink nelle varie /usr/bin /usr/share/icons ecc...
Re: Pacchetto slackware da rpm
Inviato: sab 31 mar 2012, 10:13
da hashbang
N1cuz ha scritto:è proprio sbagliato il symlink, mi butta in /opt/linuxqq/bin/ il link a /usr/bin invece dell'opposto
Rileggendo il messaggio, direi che l'errore è giusto.
Hai sbagliato la sintassi di ln(1).
Se vuoi fare un symlink in /usr da /opt, devi fare il contrario.
Codice: Seleziona tutto
ln -sf /opt/$PRGNAM/share/applications/linuxqq.desktop $PKG/usr/share/linuxqq.desktop
ln -sf ln -sf /opt/PRGNAM/bin/qq $PKG/usr/bin/qq
ln -sf /opt/$PRGNAM/share/icons/qq.png $PKG/usr/share/icons/qq.png
vengono rimossi anche i file a cui dovrebbero linkare
A questo punto penso che ciò sia derivato dal fatto che hai sovrascritto i binari con i symlink, a causa della sintassi errata.
Offtopic: Al posto di dare cd -, puoi o usare il comando diretto come ho postato io oppure usare una subshell
[/offtopic]
Re: Pacchetto slackware da rpm
Inviato: sab 31 mar 2012, 14:04
da N1cuz
hashbang ha scritto:N1cuz ha scritto:è proprio sbagliato il symlink, mi butta in /opt/linuxqq/bin/ il link a /usr/bin invece dell'opposto
Rileggendo il messaggio, direi che l'errore è giusto.
Hai sbagliato la sintassi di ln(1).
Se vuoi fare un symlink in /usr da /opt, devi fare il contrario.
Codice: Seleziona tutto
ln -sf /opt/$PRGNAM/share/applications/linuxqq.desktop $PKG/usr/share/linuxqq.desktop
ln -sf ln -sf /opt/PRGNAM/bin/qq $PKG/usr/bin/qq
ln -sf /opt/$PRGNAM/share/icons/qq.png $PKG/usr/share/icons/qq.png
vengono rimossi anche i file a cui dovrebbero linkare
A questo punto penso che ciò sia derivato dal fatto che hai sovrascritto i binari con i symlink, a causa della sintassi errata.
Offtopic: Al posto di dare cd -, puoi o usare il comando diretto come ho postato io oppure usare una subshell
[/offtopic]
Mammamia che cerebroleso!!! Non mi ero minimamente accorto di aver invertito la sintassi...
Adesso lo slackbuild è a posto, la cosa che non mi funziona e che non capisco è che scompattando l'rpm con
non mi estrae il binario eseguibile... mi sono accorto che il file dentro la directory /usr/bin/qq non è l'eseguibile ma è un link all'eseguibile che l'rpm metterebbe in /usr/share/Tencent/qq/ e che io non ho... Sto per caso sbagliando tool???
Re: Pacchetto slackware da rpm
Inviato: sab 31 mar 2012, 14:13
da N1cuz
Lascia stare sono veramente da galera! Ti ringrazio per l'aiuto, non avevo visto che l'eseguibile è in un'altra directory correttamente estratta dal tool, ovviamente avendo copiato sotto /opt la directory sbagliata non potevo avere l'eseguibile.... Grazie mille hash per la pazienza!
Re: Pacchetto slackware da rpm
Inviato: sab 31 mar 2012, 15:14
da N1cuz
Sto pacchetto è maledetto, installato con rpm2tgz, mette tutto sotto /usr/share e funziona bene, facendo il pacchetto mettendo tutto sotto /opt mi da questo errore:
Codice: Seleziona tutto
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_new_subpixbuf: assertion `GDK_IS_PIXBUF (src_pixbuf)' failed
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_scale_simple: assertion `src != NULL' failed
(qq:22769): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GdkPixbuf-CRITICAL **: gdk_pixbuf_add_alpha: assertion `pixbuf != NULL' failed
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
[14:54:14][TLOG][warn]res_db: error message-> unable to open database file
(qq:22769): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
^C
Re: Pacchetto slackware da rpm
Inviato: sab 31 mar 2012, 15:36
da hashbang
Prova a ricostruirlo facendo un symlink di *tutti* gli elementi del pacchetto, piazzandoli nelle posizioni originarie (/usr) e lasciando il contenuto a cui faranno riferimento in /opt.