Fraste_
25-11-2011, 19:56
Salve a tutti,
Vi scrivo in quanto sto entrando nel mondo unix e sto provando un pò di unix differenti. Sono partito appunto con Solaris11 e ho avuto subito bisogno di installare delle cose che sono presenti invece in RedHat e tutte le distro che "discendono" da RedHat. Qui subentrano i file RPM, mentre su Solaris sono presenti i file .pkg. Quindi mi è sorta la domanda immediatamente e ho cercato di capire se potevo da un rpm arrivare ad avere un pkg. La domanda ha ricevuto risposta immediata (grazie Google!), ma con qualche programma.
Il codice però è per il vecchio pkg infatti presenta ancora pkgadd e altri simili. Il problema è stato di risoluzione veloce infatti basta aggiungere a questi comandi la dicitura /bin/.
Il codice trasformato è il seguente:
#!/usr/bin/perl
#
# rpm2pkg - creating Solaris pkg files from Linux rpm's
#
# 2008 - Mike Golvach - eggi@comcast.net
#
# Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License
#
$rpm=$ARGV[0];
$tmp_dir="dir.$$";
$orig_dir=`pwd`;
mkdir("$tmp_dir");
chdir("$tmp_dir");
system("rpm2cpio ../$rpm|cpio -dim");
$proto_list=`find . -print|/bin/pkgproto|grep -v prototype`;
open(TMP_FILE, ">>prototype");
print TMP_FILE "i pkg info\n";
print TMP_FILE $proto_list;
close(TMP_FILE);
@pkg_info=`strings ../$rpm`;
$count = 0;
foreach (@pkg_info) {
if ( $_ =~ /\# \@\(\#\)BegWS/ ) {
push(@rpm_info, $_);
$count++;
} elsif ( $_ =~ /\# \@\(\#\)EndWS/ ) {
last;
} elsif ( $count > 0 ) {
push(@rpm_info, $_);
}
}
$uname_s = `uname -s`;
$uname_r = `uname -r`;
$uname_p = `uname -p`;
$pkg_name = $rpm;
$pkg_name =~ s/\.rpm//;
chomp $uname_s;
chomp $uname_r;
chomp $uname_p;
chomp $rpm_info[1];
chomp $rpm_info[2];
chomp $rpm_info[5];
chomp $rpm_info[12];
open(PKGINFO, ">>pkginfo");
print PKGINFO "SUNW_PRODNAME=\"$uname_s\"\n";
print PKGINFO "SUNW_PRODVERS=\"$uname_r\"\n";
print PKGINFO "SUNW_PKGTYPE=\"usr\"\n";
print PKGINFO "PKG=\"$pkg_name\"\n";
print PKGINFO "NAME=\"$rpm_info[2]\"\n";
print PKGINFO "VERSION=\"$rpm_info[5]\"\n";
print PKGINFO "VENDOR=\"$rpm_info[1]\"\n";
print PKGINFO "ARCH=\"$uname_p\"\n";
print PKGINFO "EMAIL=\"me@xyz.com\"\n";
print PKGINFO "CATEGORY=\"application\"\n";
print PKGINFO "BASEDIR=/\n";
print PKGINFO "DESC=\"$rpm_info[12]\"\n";
print PKGINFO "PSTAMP=\"Your Name Here\"\n";
print PKGINFO "CLASSES=\"none\"\n";
close(PKGINFO);
system("/bin/pkgmk -o -b `pwd` -d /tmp");
system("/bin/pkgtrans -o -s /tmp `pwd`/test01.pkg test01");
system("mv test01.pkg ../");
system("cd ../;pwd;rm -r $tmp_dir");
(ho modificato l'ultima parte dove scrivo test01 perchè ho provato di tutto)
Ora mi da due errori ma non sullo script in se ma durante la compilazione infatti mi restituisce:
## Building pkgmap from package prototype file.
ERROR in prototype:
garbled entry
- pathname: pkg
- problem: extra tokens on input line
pkgmk: ERROR: unable to build pkgmap from prototype file
## Packaging was not successful.
pkgtrans: ERROR: unable to complete package transfer
- no packages were selected from </tmp>
mv: cannot access test01.pkg
/root
Come posso risolvere?
Grazie a tutti,
Fraste_
Vi scrivo in quanto sto entrando nel mondo unix e sto provando un pò di unix differenti. Sono partito appunto con Solaris11 e ho avuto subito bisogno di installare delle cose che sono presenti invece in RedHat e tutte le distro che "discendono" da RedHat. Qui subentrano i file RPM, mentre su Solaris sono presenti i file .pkg. Quindi mi è sorta la domanda immediatamente e ho cercato di capire se potevo da un rpm arrivare ad avere un pkg. La domanda ha ricevuto risposta immediata (grazie Google!), ma con qualche programma.
Il codice però è per il vecchio pkg infatti presenta ancora pkgadd e altri simili. Il problema è stato di risoluzione veloce infatti basta aggiungere a questi comandi la dicitura /bin/.
Il codice trasformato è il seguente:
#!/usr/bin/perl
#
# rpm2pkg - creating Solaris pkg files from Linux rpm's
#
# 2008 - Mike Golvach - eggi@comcast.net
#
# Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License
#
$rpm=$ARGV[0];
$tmp_dir="dir.$$";
$orig_dir=`pwd`;
mkdir("$tmp_dir");
chdir("$tmp_dir");
system("rpm2cpio ../$rpm|cpio -dim");
$proto_list=`find . -print|/bin/pkgproto|grep -v prototype`;
open(TMP_FILE, ">>prototype");
print TMP_FILE "i pkg info\n";
print TMP_FILE $proto_list;
close(TMP_FILE);
@pkg_info=`strings ../$rpm`;
$count = 0;
foreach (@pkg_info) {
if ( $_ =~ /\# \@\(\#\)BegWS/ ) {
push(@rpm_info, $_);
$count++;
} elsif ( $_ =~ /\# \@\(\#\)EndWS/ ) {
last;
} elsif ( $count > 0 ) {
push(@rpm_info, $_);
}
}
$uname_s = `uname -s`;
$uname_r = `uname -r`;
$uname_p = `uname -p`;
$pkg_name = $rpm;
$pkg_name =~ s/\.rpm//;
chomp $uname_s;
chomp $uname_r;
chomp $uname_p;
chomp $rpm_info[1];
chomp $rpm_info[2];
chomp $rpm_info[5];
chomp $rpm_info[12];
open(PKGINFO, ">>pkginfo");
print PKGINFO "SUNW_PRODNAME=\"$uname_s\"\n";
print PKGINFO "SUNW_PRODVERS=\"$uname_r\"\n";
print PKGINFO "SUNW_PKGTYPE=\"usr\"\n";
print PKGINFO "PKG=\"$pkg_name\"\n";
print PKGINFO "NAME=\"$rpm_info[2]\"\n";
print PKGINFO "VERSION=\"$rpm_info[5]\"\n";
print PKGINFO "VENDOR=\"$rpm_info[1]\"\n";
print PKGINFO "ARCH=\"$uname_p\"\n";
print PKGINFO "EMAIL=\"me@xyz.com\"\n";
print PKGINFO "CATEGORY=\"application\"\n";
print PKGINFO "BASEDIR=/\n";
print PKGINFO "DESC=\"$rpm_info[12]\"\n";
print PKGINFO "PSTAMP=\"Your Name Here\"\n";
print PKGINFO "CLASSES=\"none\"\n";
close(PKGINFO);
system("/bin/pkgmk -o -b `pwd` -d /tmp");
system("/bin/pkgtrans -o -s /tmp `pwd`/test01.pkg test01");
system("mv test01.pkg ../");
system("cd ../;pwd;rm -r $tmp_dir");
(ho modificato l'ultima parte dove scrivo test01 perchè ho provato di tutto)
Ora mi da due errori ma non sullo script in se ma durante la compilazione infatti mi restituisce:
## Building pkgmap from package prototype file.
ERROR in prototype:
garbled entry
- pathname: pkg
- problem: extra tokens on input line
pkgmk: ERROR: unable to build pkgmap from prototype file
## Packaging was not successful.
pkgtrans: ERROR: unable to complete package transfer
- no packages were selected from </tmp>
mv: cannot access test01.pkg
/root
Come posso risolvere?
Grazie a tutti,
Fraste_