Skip to content

Commit

Permalink
Fixed: add-apt-repository - unknown -y option (Ubuntu Lucid Lynx)
Browse files Browse the repository at this point in the history
Removed packages file for Ubuntu Oneiric Ocelot ( EOL 20130509)
Small fixes
  • Loading branch information
nuxwin committed May 9, 2013
1 parent 7ccf49a commit 2067aeb
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 235 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG
Expand Up @@ -10,8 +10,8 @@ CONFIGS:
- Added named.conf.local and named.conf.options files
- Fixed: Useless section must be removed in generated Apache configuration files
- Fixed: diff package isn't available for Ubuntu > 12.04 (replaced by diffutils)
- Removed packages file for Ubuntu Oneiric Ocelot ( EOL 20130509)
- Updated php.ini files

ENGINE:
- Added support for Apache + PHP FPM
- Added option allowing to disable/enable IPv6 support (Bind9)
Expand All @@ -36,6 +36,7 @@ GUI:

SETUP:
- Added support for external repositories (Debian/Ubuntu)
- Fixed: add-apt-repository - unknown -y option (Ubuntu Lucid Lynx)
- Fixed: APT packages manager must be configured before any package installation
- Fixed: All MySQL secure installation tasks are now done by the i-MSCP installer
- Fixed: i-MSCP must allow usage of remote SQL server
Expand Down
47 changes: 25 additions & 22 deletions autoinstaller/Adapter/Debian.pm
Expand Up @@ -108,8 +108,8 @@ sub preBuild

my @steps = (
[sub { $self->_preparePackagesList() }, 'Generating list of packages to uninstall and install'],
[sub { $self->_addExternalRepositories() }, 'Adding external repositories if any'],
[sub { $self->_addAptPreferencesFile() }, 'Adding APT preferences file if any'],
[sub { $self->_addExternalRepositories() }, 'Process external repositories if any'],
[sub { $self->_addAptPreferencesFile() }, 'Process APT preferences file if any'],
[sub { $self->_updatePackagesIndex() }, 'Updating packages index files']
);

Expand Down Expand Up @@ -274,6 +274,7 @@ sub _preparePackagesList
my $distribution = lc($lsbRelease->getId(1));
my $codename = lc($lsbRelease->getCodename(1));
my $packagesFile = "$FindBin::Bin/docs/" . ucfirst($distribution) . "/packages-$codename.xml";

my $rs = 0;

eval "use XML::Simple; 1";
Expand All @@ -285,6 +286,8 @@ sub _preparePackagesList
my $xml = XML::Simple->new(NoEscape => 1);
my $data = eval { $xml->XMLin($packagesFile, KeyAttr => 'name') };

fatal("Unable to read $packagesFile: $@") if($@);

for(sort keys %{$data}) {
if($data->{$_}->{'alternative'}) {
my $service = $_;
Expand Down Expand Up @@ -481,30 +484,35 @@ sub _updateAptSourceList
my $section = $_;
my @seen = ();

while($content =~ /^deb\s+(?<uri>(?:https?|ftp)[^\s]+)\s+(?<distrib>[^\s]+)\s+(?<components>.+)$/mg) {
while($content =~ /^deb\s+(?<uri>(?:https?|ftp)[^\s]+)\s+(?<distrib>[^\s]+)\s+(?<components>.+)$/gm) {
my %repository = %+;

next if "$repository{'uri'}#$repository{'distrib'}" ~~ @seen;
if("$repository{'uri'} $repository{'distrib'}" ~~ @seen) {
debug("Repository '$repository{'uri'} $repository{'distrib'}' already checked for '$section' section. Skipping...");
next;
}

# is a section available in repository?
unless($repository{'components'} =~ /\s?$section(\s|$)/) {
debug("\nChecking repository '$repository{'uri'} $repository{'distrib'}' for '$section' section.");

unless($content =~ /^deb\s+$repository{'uri'}\s+\b$repository{'distrib'}\b\s+.*\b$section\b/m) {
my $uri = "$repository{'uri'}/dists/$repository{'distrib'}/$section/";
$rs = execute("wget --spider $uri", \$stdout, \$stderr);
debug($stdout) if $stdout;
debug($stderr) if $rs && $stderr;

unless ($rs) {
$foundSection = 1;
debug("Enabling section '$section' on $repository{uri}");
$content =~ s/^($&)$/$1 $section/mg;
debug("Enabling section '$section' on '$repository{uri} $repository{'distrib'}'");
$content =~ s/^($&)$/$1 $section/m;

$needUpdate = 1;
push @seen, "$repository{'uri'} $repository{'distrib'}";
}
} else {
debug("Section '$section' is already enabled on $repository{uri}");
debug("Section '$section' already enabled on '$repository{uri} $repository{'distrib'}'");
$foundSection = 1;
push @seen, "$repository{'uri'} $repository{'distrib'}";
}

push @seen, "$repository{'uri'} $repository{'distrib'}";
}

unless($foundSection) {
Expand All @@ -519,9 +527,6 @@ sub _updateAptSourceList

$rs = $file->save();
return $rs if $rs;

$rs = $self->_updatePackagesIndex();
return $rs if $rs;
}

0;
Expand All @@ -544,14 +549,14 @@ sub _addExternalRepositories

if(@{$self->{'externalRepositoriesToRemove'}} || @{$self->{'externalRepositories'}}) {

my $file = iMSCP::File->new('filename' => '/etc/apt/sources.list');
my $sourceListFile = iMSCP::File->new('filename' => '/etc/apt/sources.list');

unless (-f '/etc/apt/sources.list.bkp') {
$rs = $file->copyFile('/etc/apt/sources.list.bkp');;
$rs = $sourceListFile->copyFile('/etc/apt/sources.list.bkp');
return $rs if $rs;
}

my $content = $file->get();
my $content = $sourceListFile->get();

unless (defined $content) {
error('Unable to read /etc/apt/sources.list file');
Expand Down Expand Up @@ -584,9 +589,7 @@ sub _addExternalRepositories
return $rs if $rs;

# Schedule packages for deletion
if($stdout) {
@{$self->{'packagesToUninstall'}} = (@{$self->{'packagesToUninstall'}}, split("\n", $stdout));
}
@{$self->{'packagesToUninstall'}} = (@{$self->{'packagesToUninstall'}}, split("\n", $stdout)) if $stdout;

# Remove the repository from the sources.list file
$content =~ s/\n?(deb|deb-src)\s+$_->{'repository'}\n?//gm;
Expand Down Expand Up @@ -626,10 +629,10 @@ sub _addExternalRepositories
}

if($needUpdate) {
$rs = $file->set($content);
$rs = $sourceListFile->set($content);
return $rs if $rs;

$file->save();
$sourceListFile->save();
return $rs if $rs;
}
}
Expand Down
64 changes: 48 additions & 16 deletions autoinstaller/Adapter/Ubuntu.pm
Expand Up @@ -97,14 +97,16 @@ sub _init
sub _addExternalRepositories
{
my $self = shift;

my $distroRelease = iMSCP::LsbRelease->getInstance()->getRelease(1);
my $rs = 0;

if(@{$self->{'externalRepositoriesToRemove'}} || @{$self->{'externalRepositories'}}) {

my $file = iMSCP::File->new('filename' => '/etc/apt/sources.list');
my $sourceListFile = iMSCP::File->new('filename' => '/etc/apt/sources.list');

unless(-f '/etc/apt/sources.list.bkp') {
$rs = $file->copyFile('/etc/apt/sources.list.bkp');
$rs = $sourceListFile->copyFile('/etc/apt/sources.list.bkp');
return $rs if $rs;
}

Expand Down Expand Up @@ -134,14 +136,36 @@ sub _addExternalRepositories
return $rs if $rs;

# Schedule packages for deletion
if($stdout) {
@{$self->{'packagesToUninstall'}} = (@{$self->{'packagesToUninstall'}}, split("\n", $stdout));
}
@{$self->{'packagesToUninstall'}} = (@{$self->{'packagesToUninstall'}}, split("\n", $stdout)) if $stdout;

# Remove the repository from the sources.list file
$rs = execute("add-apt-repository -y -r $_->{'repository'}", \$stdout, \$stderr);
debug($stdout) if $stdout;
error($stderr) if $stderr && $rs;
# Remove the repository
if($distroRelease > 10.04) {
$rs = execute("add-apt-repository -y -r $_->{'repository'}", \$stdout, \$stderr);
debug($stdout) if $stdout;
error($stderr) if $stderr && $rs;
} else {
# add-apt-repository command as provided by Ubuntu lucid doesn't provide any option
if($_->{'repository'} =~ m%^ppa:(.*)/(.*)%) { # PPA repository
my $ppaFile = "/etc/apt/sources.list.d/$1-$2-*";

if(glob $ppaFile) {
$rs = execute("$main::imscpConfig{'CMD_RM'} $ppaFile", \$stdout, \$stderr);
debug($stdout) if $stdout;
error($stderr) if $stderr && $rs;
return $rs if $rs;
}
} else { # Normal repository
# Remove the repository from the sources.list file
my $content = $sourceListFile->get();
$content =~ s/\n?(deb|deb-src)\s+$_->{'repository'}\n?//gm;

$rs = $sourceListFile->set($content);
return $rs if $rs;

$rs = $sourceListFile->save();
return $rs if $rs;
}
}
}

eval "use List::MoreUtils qw(uniq); 1";
Expand All @@ -153,18 +177,26 @@ sub _addExternalRepositories
# Add needed external repositories
for(@{$self->{'externalRepositories'}}) {
if($_->{'repository'} =~ /^ppa:/) { # PPA repository
if($_->{'repository_key_srv'}) {
$cmd = "add-apt-repository -y -k $_->{'repository_key_srv'} $_->{'repository'}";
} else {
$cmd = "add-apt-repository -y $_->{'repository'}";
}
if($distroRelease > 10.4) {
if($_->{'repository_key_srv'}) {
$cmd = "add-apt-repository -y -k $_->{'repository_key_srv'} $_->{'repository'}";
} else {
$cmd = "add-apt-repository -y $_->{'repository'}";
}
} else {
$cmd = "add-apt-repository $_->{'repository'}";
}

$rs = execute($cmd, \$stdout, \$stderr);
debug($stdout) if $stdout;
error($stderr) if $stderr && $rs;
return $rs if $rs
} else { # normal repository
$rs = execute("add-apt-repository -y $_->{'repository'}", \$stdout, \$stderr);
} else { # Normal repository
if($distroRelease > 10.4) {
$rs = execute("add-apt-repository -y $_->{'repository'}", \$stdout, \$stderr);
} else {
$rs = execute("add-apt-repository $_->{'repository'}", \$stdout, \$stderr);
}
debug($stdout) if $stdout;
error($stderr) if $stderr && $rs;
return $rs if $rs;
Expand Down
2 changes: 1 addition & 1 deletion docs/Ubuntu/packages-lucid.xml
Expand Up @@ -14,7 +14,7 @@
<package>apache2-mpm-itk</package>
<package>libapache2-mod-php5</package>
</apache_itk>
<apache_php_fpm repository="ppa:brianmercer/php5" repository_origin="LP-PPA-brianmercer-php5">
<apache_php_fpm repository="ppa:fabianarias/php5" repository_origin="LP-PPA-fabianarias-php5">
<package>apache2</package>
<package>apache2-mpm-worker</package>
<package>libapache2-mod-fastcgi</package>
Expand Down

0 comments on commit 2067aeb

Please sign in to comment.