diff --git a/CHANGELOG b/CHANGELOG index 0c495e2ff9..b0dd428d8d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -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) @@ -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 diff --git a/autoinstaller/Adapter/Debian.pm b/autoinstaller/Adapter/Debian.pm index 81014e3991..6815f161e6 100644 --- a/autoinstaller/Adapter/Debian.pm +++ b/autoinstaller/Adapter/Debian.pm @@ -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'] ); @@ -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"; @@ -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 = $_; @@ -481,13 +484,17 @@ sub _updateAptSourceList my $section = $_; my @seen = (); - while($content =~ /^deb\s+(?(?:https?|ftp)[^\s]+)\s+(?[^\s]+)\s+(?.+)$/mg) { + while($content =~ /^deb\s+(?(?:https?|ftp)[^\s]+)\s+(?[^\s]+)\s+(?.+)$/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; @@ -495,16 +502,17 @@ sub _updateAptSourceList 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) { @@ -519,9 +527,6 @@ sub _updateAptSourceList $rs = $file->save(); return $rs if $rs; - - $rs = $self->_updatePackagesIndex(); - return $rs if $rs; } 0; @@ -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'); @@ -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; @@ -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; } } diff --git a/autoinstaller/Adapter/Ubuntu.pm b/autoinstaller/Adapter/Ubuntu.pm index 59da7cd4ab..f83d5de20b 100644 --- a/autoinstaller/Adapter/Ubuntu.pm +++ b/autoinstaller/Adapter/Ubuntu.pm @@ -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; } @@ -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"; @@ -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; diff --git a/docs/Ubuntu/packages-lucid.xml b/docs/Ubuntu/packages-lucid.xml index 64be88d685..f7f2869874 100644 --- a/docs/Ubuntu/packages-lucid.xml +++ b/docs/Ubuntu/packages-lucid.xml @@ -14,7 +14,7 @@ apache2-mpm-itk libapache2-mod-php5 - + apache2 apache2-mpm-worker libapache2-mod-fastcgi diff --git a/docs/Ubuntu/packages-oneiric.xml b/docs/Ubuntu/packages-oneiric.xml deleted file mode 100644 index 0179873189..0000000000 --- a/docs/Ubuntu/packages-oneiric.xml +++ /dev/null @@ -1,195 +0,0 @@ - - - - - apache2 - apache2-mpm-worker - apache2-suexec - libapache2-mod-fcgid - libapache2-mod-fastcgi - php5-cgi - - - apache2 - apache2-mpm-itk - libapache2-mod-php5 - - - apache2 - apache2-mpm-worker - libapache2-mod-fastcgi - php5-fpm - - - - - - - courier-imap - courier-imap-ssl - courier-pop - courier-pop-ssl - libgamin0 - maildrop - - - dovecot-imapd - dovecot-pop3d - dovecot-mysql - dovecot-sieve - dovecot-managesieved - - - - - - - postfix - - - - - - - proftpd-basic - proftpd-mod-mysql - - - - - - - bind9 - - - - - - - mysql-server - mysql-client - mysql-common - - - mariadb-client - mariadb-server - mysql-common - - - mariadb-client - mariadb-server - mysql-common - - - mysql-client - - - - - php5 - php5-cli - php-pear - php5-adodb - php5-gd - php-gettext - php5-intl - php5-mcrypt - php5-mysql - php5-suhosin - - - perl - perl-base - libperl5.12 - libberkeleydb-perl - libcrypt-blowfish-perl - libcrypt-cbc-perl - libcrypt-passwdmd5-perl - libdata-validate-domain-perl - libdata-validate-ip-perl - libdate-calc-perl - libdate-manip-perl - libdatetime-perl - libdbd-mysql-perl - libdbi-perl - libdigest-md5-perl - libemail-valid-perl - libfile-copy-recursive-perl - libfile-mimeinfo-perl - libio-socket-inet6-perl - libio-stringy-perl - libmail-sendmail-perl - libmailtools-perl - libmime-perl - libnet-dns-perl - libnet-libidn-perl - libnet-netmask-perl - libnet-smtp-server-perl - libsnmp-session-perl - libterm-readkey-perl - libterm-readpassword-perl - libhtml-parser-perl - libtimedate-perl - libxml-parser-perl - libxml-simple-perl - libemail-simple-perl - libjson-perl - - - at - bash - pbzip2 - bzip2 - awstats - chkrootkit - dialog - diffutils - dnsutils - gcc - gzip - iptables - ispell - libc6-dev - libexpat1 - libexpat1-dev - libsasl2-modules - libmcrypt4 - locales - lynx - lzma - make - openssl - original-awk - patch - policyd-weight - postgrey - procmail - rkhunter - sasl2-bin - ssh - tar - wget - curl - git - -