6 Commits
8.73 ... 8.75

8 changed files with 57 additions and 23 deletions

View File

@@ -754,7 +754,7 @@ sub postinst {
return "$firstline\n$permscript\n$rest"; return "$firstline\n$permscript\n$rest";
} }
=cut =back
=head1 AUTHOR =head1 AUTHOR

View File

@@ -327,6 +327,8 @@ sub build {
return $name; return $name;
} }
=back
=head1 AUTHOR =head1 AUTHOR
Mark Hershberger <mah@everybody.org> Mark Hershberger <mah@everybody.org>

View File

@@ -463,11 +463,16 @@ debian/slackware scripts can be anything -- perl programs or binary files
-- and rpm is limited to only shell scripts, we need to encode the files -- and rpm is limited to only shell scripts, we need to encode the files
and add a scrap of shell script to make it unextract and run on the fly. and add a scrap of shell script to make it unextract and run on the fly.
When setting a value, we do some mangling too. Rpm maitainer scripts When setting a value, we do some mangling too. Rpm maintainer scripts
are typically shell scripts, but often lack the leading #!/bin/sh are typically shell scripts, but often lack the leading shebang line.
This can confuse dpkg, so add the #!/bin/sh if it looks like there This can confuse dpkg, so add the shebang if it looks like there
is no shebang magic already in place. is no shebang magic already in place.
Additionally, it's not uncommon for rpm maintainer scripts to contain
bashisms, which can be triggered when they are ran on systems where /bin/sh
is not bash. To work around this, the shebang line of the scripts is
changed to use bash.
Also, if the rpm is relocatable, the script could refer to Also, if the rpm is relocatable, the script could refer to
RPM_INSTALL_PREFIX, which is set by rpm at run time. Deal with this by RPM_INSTALL_PREFIX, which is set by rpm at run time. Deal with this by
adding code to the script to set RPM_INSTALL_PREFIX. adding code to the script to set RPM_INSTALL_PREFIX.
@@ -489,9 +494,10 @@ sub _script_helper {
my $value=shift; my $value=shift;
if (length $value and $value !~ m/^#!\s*\//) { if (length $value and $value !~ m/^#!\s*\//) {
$value="#!/bin/sh\n$prefixcode$value"; $value="#!/bin/bash\n$prefixcode$value";
} }
else { else {
$value=~s@^#!\s*/bin/sh(\s)@#/bin/bash$1@;
$value=~s/\n/\n$prefixcode/s; $value=~s/\n/\n$prefixcode/s;
} }
$this->{$script} = $value; $this->{$script} = $value;

View File

@@ -358,6 +358,8 @@ sub release {
} }
=back
=head1 AUTHOR =head1 AUTHOR
Joey Hess <joey@kitenet.net> Joey Hess <joey@kitenet.net>

View File

@@ -9,10 +9,14 @@ Alien::Package::Tgz - an object that represents a tgz package
package Alien::Package::Tgz; package Alien::Package::Tgz;
use strict; use strict;
use base qw(Alien::Package); use base qw(Alien::Package);
use Cwd qw(abs_path);
my $tarext=qr/\.(?:tgz|tar(?:\.(?:gz|Z|z|bz|bz2))?|taz)$/;
=head1 DESCRIPTION =head1 DESCRIPTION
This is an object class that represents a tgz package, as used in Slackware. This is an object class that represents a tgz package, as used in Slackware.
It also allows conversion of raw tar files.
It is derived from Alien::Package. It is derived from Alien::Package.
=head1 CLASS DATA =head1 CLASS DATA
@@ -49,7 +53,7 @@ sub checkfile {
my $this=shift; my $this=shift;
my $file=shift; my $file=shift;
return $file =~ m/.*\.(?:tgz|tar\.(?:gz|Z|z)|taz)$/; return $file =~ m/$tarext$/;
} }
=item install =item install
@@ -93,7 +97,7 @@ sub scan {
my ($basename)=('/'.$file)=~m#^/?.*/(.*?)$#; my ($basename)=('/'.$file)=~m#^/?.*/(.*?)$#;
# Strip out any tar extentions. # Strip out any tar extentions.
$basename=~s/\.(tgz|tar\.(gz|Z))$//; $basename=~s/$tarext//;
if ($basename=~m/([\w-]+)-([0-9\.?]+).*/) { if ($basename=~m/([\w-]+)-([0-9\.?]+).*/) {
$this->name($1); $this->name($1);
@@ -106,11 +110,11 @@ sub scan {
$this->arch('all'); $this->arch('all');
$this->summary("Converted Slackware tgz package"); $this->summary("Converted tgz package");
$this->description($this->summary); $this->description($this->summary);
$this->copyright('unknown'); $this->copyright('unknown');
$this->release(1); $this->release(1);
$this->distribution("Slackware"); $this->distribution("Slackware/tarball");
$this->group("unknown"); $this->group("unknown");
$this->origformat('tgz'); $this->origformat('tgz');
$this->changelogtext(''); $this->changelogtext('');
@@ -119,7 +123,7 @@ sub scan {
# Now figure out the conffiles. Assume anything in etc/ is a # Now figure out the conffiles. Assume anything in etc/ is a
# conffile. # conffile.
my @conffiles; my @conffiles;
open (FILELIST,"tar zvtf $file | grep etc/ |") || open (FILELIST,"tar vtf $file | grep etc/ |") ||
die "getting filelist: $!"; die "getting filelist: $!";
while (<FILELIST>) { while (<FILELIST>) {
# Make sure it's a normal file. This is looking at the # Make sure it's a normal file. This is looking at the
@@ -136,7 +140,7 @@ sub scan {
# Now get the whole filelist. We have to add leading /'s to the # Now get the whole filelist. We have to add leading /'s to the
# filenames. We have to ignore all files under /install/ # filenames. We have to ignore all files under /install/
my @filelist; my @filelist;
open (FILELIST, "tar ztf $file |") || open (FILELIST, "tar tf $file |") ||
die "getting filelist: $!"; die "getting filelist: $!";
while (<FILELIST>) { while (<FILELIST>) {
chomp; chomp;
@@ -148,7 +152,7 @@ sub scan {
# Now get the scripts. # Now get the scripts.
foreach my $script (keys %{scripttrans()}) { foreach my $script (keys %{scripttrans()}) {
$this->$script(scalar $this->runpipe(1, "tar Oxzf $file install/${scripttrans()}{$script} 2>/dev/null")); $this->$script(scalar $this->runpipe(1, "tar Oxf $file install/${scripttrans()}{$script} 2>/dev/null"));
} }
return 1; return 1;
@@ -163,9 +167,9 @@ Unpack tgz.
sub unpack { sub unpack {
my $this=shift; my $this=shift;
$this->SUPER::unpack(@_); $this->SUPER::unpack(@_);
my $file=$this->filename; my $file=abs_path($this->filename);
$this->do("cat $file | (cd ".$this->unpacked_tree."; tar zxpf -)") $this->do("cd ".$this->unpacked_tree."; tar xpf $file")
or die "Unpacking of '$file' failed: $!"; or die "Unpacking of '$file' failed: $!";
# Delete the install directory that has slackware info in it. # Delete the install directory that has slackware info in it.
$this->do("cd ".$this->unpacked_tree."; rm -rf ./install"); $this->do("cd ".$this->unpacked_tree."; rm -rf ./install");
@@ -218,6 +222,8 @@ sub build {
return $tgz; return $tgz;
} }
=back
=head1 AUTHOR =head1 AUTHOR
Joey Hess <joey@kitenet.net> Joey Hess <joey@kitenet.net>

19
debian/changelog vendored
View File

@@ -1,3 +1,22 @@
alien (8.75) unstable; urgency=low
* Simplified rules file.
* Modify maintainer scripts from rpm files to use /bin/bash rather
than /bin/sh. Many such scripts are only tested on systems where /bin/sh
is bash, and contain bashisms, which can cause trouble when converting
the rpm to be used on eg, the Debian family of distributions, where
/bin/sh can legitimatly be dash. Closes: #495971
-- Joey Hess <joeyh@debian.org> Wed, 06 May 2009 17:22:02 -0400
alien (8.74) unstable; urgency=low
* Support bzipped and uncompressed tar files, using tar's auto-compression
detection. (Requires gnu tar 1.14.91)
* pod fixes
-- Joey Hess <joeyh@debian.org> Sun, 15 Feb 2009 19:51:54 -0500
alien (8.73) unstable; urgency=low alien (8.73) unstable; urgency=low
* Fix pkg generation to not include /prototype in all packages. * Fix pkg generation to not include /prototype in all packages.

4
debian/control vendored
View File

@@ -1,9 +1,9 @@
Source: alien Source: alien
Section: admin Section: admin
Priority: optional Priority: optional
Build-Depends: debhelper (>= 7) Build-Depends: debhelper (>= 7.0.50)
Maintainer: Joey Hess <joeyh@debian.org> Maintainer: Joey Hess <joeyh@debian.org>
Standards-Version: 3.7.3 Standards-Version: 3.8.1
Vcs-Git: git://git.kitenet.net/alien Vcs-Git: git://git.kitenet.net/alien
Homepage: http://kitenet.net/~joey/code/alien/ Homepage: http://kitenet.net/~joey/code/alien/

13
debian/rules vendored
View File

@@ -2,20 +2,19 @@
%: %:
dh $@ dh $@
build: override_dh_auto_test:
dh build
# simple smoke test # simple smoke test
./alien.pl -V ./alien.pl -V
binary-indep: build override_dh_auto_install:
dh install --before dh_auto_install
$(MAKE) pure_install INSTALLDIRS=vendor \ $(MAKE) pure_install INSTALLDIRS=vendor \
PREFIX=$(shell pwd)/debian/alien/$(shell perl -MConfig -e 'print $$Config{prefix}') \ PREFIX=$(shell pwd)/debian/alien/$(shell perl -MConfig -e 'print $$Config{prefix}') \
VARPREFIX=$(shell pwd)/debian/alien VARPREFIX=$(shell pwd)/debian/alien
dh install --after dh_auto_install
override_dh_auto_clean:
# distclean moans about MANIFEST, this is quieter
if [ -e Makefile ]; then $(MAKE) realclean; fi
# Not intended for use by anyone except the author. # Not intended for use by anyone except the author.
announcedir: announcedir:
@echo ${HOME}/src/joeywiki/code/alien/news @echo ${HOME}/src/joeywiki/code/alien/news
binary: binary-indep binary-arch