summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mdk-stage1/Makefile2
-rw-r--r--mdk-stage1/disk.c167
-rw-r--r--mdk-stage1/partition.c171
-rw-r--r--mdk-stage1/partition.h28
-rw-r--r--mdk-stage1/tools.c34
-rw-r--r--mdk-stage1/tools.h2
6 files changed, 238 insertions, 166 deletions
diff --git a/mdk-stage1/Makefile b/mdk-stage1/Makefile
index 9fd254c8b..0baa93765 100644
--- a/mdk-stage1/Makefile
+++ b/mdk-stage1/Makefile
@@ -110,7 +110,7 @@ STAGE1_NETWORK_LIBS = /usr/$(LIB)/libresolv.a
endif
#- stage1 itself
-STAGE1SRC = stage1.c log.c tools.c modules.c probing.c mount.c automatic.c frontend-common.c lomount.c
+STAGE1SRC = stage1.c log.c tools.c modules.c probing.c mount.c automatic.c frontend-common.c lomount.c partition.c
CDROMSRC = cdrom.c
DISKSRC = disk.c directory.c
NETWORKSRC = network.c nfsmount.c dhcp.c url.c dns.c adsl.c directory.c
diff --git a/mdk-stage1/disk.c b/mdk-stage1/disk.c
index ca3e02526..678484c5e 100644
--- a/mdk-stage1/disk.c
+++ b/mdk-stage1/disk.c
@@ -36,155 +36,10 @@
#include "mount.h"
#include "lomount.h"
#include "automatic.h"
-
-#include "disk.h"
#include "directory.h"
+#include "partition.h"
-struct partition_detection_anchor {
- off_t offset;
- const char * anchor;
-};
-
-static int seek_and_compare(int fd, struct partition_detection_anchor anch)
-{
- char buf[500];
- size_t count;
- if (lseek(fd, anch.offset, SEEK_SET) == (off_t)-1) {
- log_perror("seek failed");
- return -1;
- }
- count = read(fd, buf, strlen(anch.anchor));
- if (count != strlen(anch.anchor)) {
- log_perror("read failed");
- return -1;
- }
- buf[count] = '\0';
- if (strcmp(anch.anchor, buf))
- return 1;
- return 0;
-}
-
-static const char * detect_partition_type(char * dev)
-{
- struct partition_detection_info {
- const char * name;
- struct partition_detection_anchor anchor0;
- struct partition_detection_anchor anchor1;
- struct partition_detection_anchor anchor2;
- };
- struct partition_detection_info partitions_signatures[] = {
- { "Linux Swap", { 4086, "SWAP-SPACE" }, { 0, NULL }, { 0, NULL } },
- { "Linux Swap", { 4086, "SWAPSPACE2" }, { 0, NULL }, { 0, NULL } },
- { "Ext2", { 0x438, "\x53\xEF" }, { 0, NULL }, { 0, NULL } },
- { "ReiserFS", { 0x10034, "ReIsErFs" }, { 0, NULL }, { 0, NULL } },
- { "ReiserFS", { 0x10034, "ReIsEr2Fs" }, { 0, NULL }, { 0, NULL } },
- { "XFS", { 0, "XFSB" }, { 0x200, "XAGF" }, { 0x400, "XAGI" } },
- { "JFS", { 0x8000, "JFS1" }, { 0, NULL }, { 0, NULL } },
- { "NTFS", { 0x1FE, "\x55\xAA" }, { 0x3, "NTFS" }, { 0, NULL } },
- { "FAT32", { 0x1FE, "\x55\xAA" }, { 0x52, "FAT32" }, { 0, NULL } },
- { "FAT", { 0x1FE, "\x55\xAA" }, { 0x36, "FAT" }, { 0, NULL } },
- { "Linux LVM", { 0, "HM\1\0" }, { 0, NULL }, { 0, NULL } }
- };
- int partitions_signatures_nb = sizeof(partitions_signatures) / sizeof(struct partition_detection_info);
- int i;
- int fd;
- const char *part_type = NULL;
-
- char device_fullname[50];
- strcpy(device_fullname, "/dev/");
- strcat(device_fullname, dev);
-
- if (ensure_dev_exists(device_fullname))
- return NULL;
- log_message("guessing type of %s", device_fullname);
-
- if ((fd = open(device_fullname, O_RDONLY, 0)) < 0) {
- log_perror("open");
- return NULL;
- }
-
- for (i=0; i<partitions_signatures_nb; i++) {
- int results = seek_and_compare(fd, partitions_signatures[i].anchor0);
- if (results == -1)
- goto detect_partition_type_end;
- if (results == 1)
- continue;
- if (!partitions_signatures[i].anchor1.anchor)
- goto detect_partition_found_it;
-
- results = seek_and_compare(fd, partitions_signatures[i].anchor1);
- if (results == -1)
- goto detect_partition_type_end;
- if (results == 1)
- continue;
- if (!partitions_signatures[i].anchor2.anchor)
- goto detect_partition_found_it;
-
- results = seek_and_compare(fd, partitions_signatures[i].anchor2);
- if (results == -1)
- goto detect_partition_type_end;
- if (results == 1)
- continue;
-
- detect_partition_found_it:
- part_type = partitions_signatures[i].name;
- break;
- }
-
- detect_partition_type_end:
- close(fd);
- return part_type;
-}
-
-static int list_partitions(char * dev_name, char ** parts, char ** comments)
-{
- int major, minor, blocks;
- char name[100];
- FILE * f;
- int i = 0;
- char buf[512];
-
- if (!(f = fopen("/proc/partitions", "rb")) || !fgets(buf, sizeof(buf), f) || !fgets(buf, sizeof(buf), f)) {
- log_perror(dev_name);
- return 1;
- }
-
- while (fgets(buf, sizeof(buf), f)) {
- memset(name, 0, sizeof(name));
- sscanf(buf, " %d %d %d %s", &major, &minor, &blocks, name);
- if ((strstr(name, dev_name) == name) && (blocks > 1) && (name[strlen(dev_name)] != '\0')) {
- const char * partition_type = detect_partition_type(name);
- parts[i] = strdup(name);
- comments[i] = (char *) malloc(sizeof(char) * 100);
- sprintf(comments[i], "size: %d Mbytes", blocks >> 10);
- if (partition_type) {
- strcat(comments[i], ", type: ");
- strcat(comments[i], partition_type);
- }
- i++;
- }
- }
- parts[i] = NULL;
- fclose(f);
-
- return 0;
-}
-
-static int try_mount(char * dev, char * location)
-{
- char device_fullname[50];
- strcpy(device_fullname, "/dev/");
- strcat(device_fullname, dev);
-
- if (my_mount(device_fullname, location, "ext2", 0) == -1 &&
- my_mount(device_fullname, location, "vfat", 0) == -1 &&
- my_mount(device_fullname, location, "ntfs", 0) == -1 &&
- my_mount(device_fullname, location, "reiserfs", 0) == -1) {
- return 1;
- }
-
- return 0;
-}
+#include "disk.h"
static enum return_type try_with_device(char *dev_name)
{
@@ -255,24 +110,6 @@ static enum return_type try_with_device(char *dev_name)
return RETURN_OK;
}
-static int get_disks(char *** names, char *** models)
-{
- char ** ptr;
- int count = 0;
-
- my_insmod("sd_mod", ANY_DRIVER_TYPE, NULL, 0);
-
- get_medias(DISK, names, models, BUS_ANY);
-
- ptr = *names;
- while (ptr && *ptr) {
- count++;
- ptr++;
- }
-
- return count;
-}
-
enum return_type disk_prepare(void)
{
char ** medias, ** medias_models;
diff --git a/mdk-stage1/partition.c b/mdk-stage1/partition.c
new file mode 100644
index 000000000..8fd581017
--- /dev/null
+++ b/mdk-stage1/partition.c
@@ -0,0 +1,171 @@
+/*
+ * Guillaume Cottenceau (gc@mandrakesoft.com)
+ *
+ * Copyright 2000 Mandrakesoft
+ *
+ * This software may be freely redistributed under the terms of the GNU
+ * public license.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/*
+ * Portions from Erik Troan (ewt@redhat.com)
+ *
+ * Copyright 1996 Red Hat Software
+ *
+ */
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+#include <libgen.h>
+#include "stage1.h"
+#include "frontend.h"
+#include "modules.h"
+#include "probing.h"
+#include "log.h"
+#include "mount.h"
+#include "lomount.h"
+#include "automatic.h"
+
+#include "disk.h"
+#include "partition.h"
+
+struct partition_detection_anchor {
+ off_t offset;
+ const char * anchor;
+};
+
+static int seek_and_compare(int fd, struct partition_detection_anchor anch)
+{
+ char buf[500];
+ size_t count;
+ if (lseek(fd, anch.offset, SEEK_SET) == (off_t)-1) {
+ log_perror("seek failed");
+ return -1;
+ }
+ count = read(fd, buf, strlen(anch.anchor));
+ if (count != strlen(anch.anchor)) {
+ log_perror("read failed");
+ return -1;
+ }
+ buf[count] = '\0';
+ if (strcmp(anch.anchor, buf))
+ return 1;
+ return 0;
+}
+
+static const char * detect_partition_type(char * dev)
+{
+ struct partition_detection_info {
+ const char * name;
+ struct partition_detection_anchor anchor0;
+ struct partition_detection_anchor anchor1;
+ struct partition_detection_anchor anchor2;
+ };
+ struct partition_detection_info partitions_signatures[] = {
+ { "Linux Swap", { 4086, "SWAP-SPACE" }, { 0, NULL }, { 0, NULL } },
+ { "Linux Swap", { 4086, "SWAPSPACE2" }, { 0, NULL }, { 0, NULL } },
+ { "Ext2", { 0x438, "\x53\xEF" }, { 0, NULL }, { 0, NULL } },
+ { "ReiserFS", { 0x10034, "ReIsErFs" }, { 0, NULL }, { 0, NULL } },
+ { "ReiserFS", { 0x10034, "ReIsEr2Fs" }, { 0, NULL }, { 0, NULL } },
+ { "XFS", { 0, "XFSB" }, { 0x200, "XAGF" }, { 0x400, "XAGI" } },
+ { "JFS", { 0x8000, "JFS1" }, { 0, NULL }, { 0, NULL } },
+ { "NTFS", { 0x1FE, "\x55\xAA" }, { 0x3, "NTFS" }, { 0, NULL } },
+ { "FAT32", { 0x1FE, "\x55\xAA" }, { 0x52, "FAT32" }, { 0, NULL } },
+ { "FAT", { 0x1FE, "\x55\xAA" }, { 0x36, "FAT" }, { 0, NULL } },
+ { "Linux LVM", { 0, "HM\1\0" }, { 0, NULL }, { 0, NULL } }
+ };
+ int partitions_signatures_nb = sizeof(partitions_signatures) / sizeof(struct partition_detection_info);
+ int i;
+ int fd;
+ const char *part_type = NULL;
+
+ char device_fullname[50];
+ strcpy(device_fullname, "/dev/");
+ strcat(device_fullname, dev);
+
+ if (ensure_dev_exists(device_fullname))
+ return NULL;
+ log_message("guessing type of %s", device_fullname);
+
+ if ((fd = open(device_fullname, O_RDONLY, 0)) < 0) {
+ log_perror("open");
+ return NULL;
+ }
+
+ for (i=0; i<partitions_signatures_nb; i++) {
+ int results = seek_and_compare(fd, partitions_signatures[i].anchor0);
+ if (results == -1)
+ goto detect_partition_type_end;
+ if (results == 1)
+ continue;
+ if (!partitions_signatures[i].anchor1.anchor)
+ goto detect_partition_found_it;
+
+ results = seek_and_compare(fd, partitions_signatures[i].anchor1);
+ if (results == -1)
+ goto detect_partition_type_end;
+ if (results == 1)
+ continue;
+ if (!partitions_signatures[i].anchor2.anchor)
+ goto detect_partition_found_it;
+
+ results = seek_and_compare(fd, partitions_signatures[i].anchor2);
+ if (results == -1)
+ goto detect_partition_type_end;
+ if (results == 1)
+ continue;
+
+ detect_partition_found_it:
+ part_type = partitions_signatures[i].name;
+ break;
+ }
+
+ detect_partition_type_end:
+ close(fd);
+ return part_type;
+}
+
+int list_partitions(char * dev_name, char ** parts, char ** comments)
+{
+ int major, minor, blocks;
+ char name[100];
+ FILE * f;
+ int i = 0;
+ char buf[512];
+
+ if (!(f = fopen("/proc/partitions", "rb")) || !fgets(buf, sizeof(buf), f) || !fgets(buf, sizeof(buf), f)) {
+ log_perror(dev_name);
+ return 1;
+ }
+
+ while (fgets(buf, sizeof(buf), f)) {
+ memset(name, 0, sizeof(name));
+ sscanf(buf, " %d %d %d %s", &major, &minor, &blocks, name);
+ if ((strstr(name, dev_name) == name) && (blocks > 1) && (name[strlen(dev_name)] != '\0')) {
+ const char * partition_type = detect_partition_type(name);
+ parts[i] = strdup(name);
+ comments[i] = (char *) malloc(sizeof(char) * 100);
+ sprintf(comments[i], "size: %d Mbytes", blocks >> 10);
+ if (partition_type) {
+ strcat(comments[i], ", type: ");
+ strcat(comments[i], partition_type);
+ }
+ i++;
+ }
+ }
+ parts[i] = NULL;
+ fclose(f);
+
+ return 0;
+}
diff --git a/mdk-stage1/partition.h b/mdk-stage1/partition.h
new file mode 100644
index 000000000..e901662df
--- /dev/null
+++ b/mdk-stage1/partition.h
@@ -0,0 +1,28 @@
+/*
+ * Olivier Blin (oblin@mandrakesoft.com)
+ *
+ * Copyright 2005 Mandrakesoft
+ *
+ * This software may be freely redistributed under the terms of the GNU
+ * public license.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/*
+ * Portions from Erik Troan (ewt@redhat.com)
+ *
+ * Copyright 1996 Red Hat Software
+ *
+ */
+
+#ifndef _PARTITION_H_
+#define _PARTITION_H_
+
+int list_partitions(char * dev_name, char ** parts, char ** comments);
+
+#endif
+
diff --git a/mdk-stage1/tools.c b/mdk-stage1/tools.c
index be050376b..8798b48ac 100644
--- a/mdk-stage1/tools.c
+++ b/mdk-stage1/tools.c
@@ -446,6 +446,40 @@ int kernel_version(void)
return charstar_to_int(val.release + 2);
}
+int try_mount(char * dev, char * location)
+{
+ char device_fullname[50];
+ strcpy(device_fullname, "/dev/");
+ strcat(device_fullname, dev);
+
+ if (my_mount(device_fullname, location, "ext2", 0) == -1 &&
+ my_mount(device_fullname, location, "vfat", 0) == -1 &&
+ my_mount(device_fullname, location, "ntfs", 0) == -1 &&
+ my_mount(device_fullname, location, "reiserfs", 0) == -1) {
+ return 1;
+ }
+
+ return 0;
+}
+
+int get_disks(char *** names, char *** models)
+{
+ char ** ptr;
+ int count = 0;
+
+ my_insmod("sd_mod", ANY_DRIVER_TYPE, NULL, 0);
+
+ get_medias(DISK, names, models, BUS_ANY);
+
+ ptr = *names;
+ while (ptr && *ptr) {
+ count++;
+ ptr++;
+ }
+
+ return count;
+}
+
char * floppy_device(void)
{
char ** names, ** models;
diff --git a/mdk-stage1/tools.h b/mdk-stage1/tools.h
index 737b323c9..a4aedfea1 100644
--- a/mdk-stage1/tools.h
+++ b/mdk-stage1/tools.h
@@ -48,6 +48,8 @@ void add_to_env(char * name, char * value);
char ** list_directory(char * direct);
int string_array_length(char ** a);
int kernel_version(void);
+int try_mount(char * dev, char * location);
+int get_disks(char *** names, char *** models);
char * floppy_device(void);
char * asprintf_(const char *msg, ...);
int scall_(int retval, char * msg, char * file, int line);
>), il => N("Israel"), it => N("Italy"), jp => N("Japan"), nl => N("Netherlands"), no => N("Norway"), nz => N("New Zealand"), pl => N("Poland"), pt => N("Portugal"), ru => N("Russia"), se => N("Sweden"), sk => N("Slovakia"), th => N("Thailand"), tw => N("Taiwan"), za => N("South Africa"), ); %land2tzs = ( N("Australia") => [ 'Australia/Sydney' ], N("Austria") => [ 'Europe/Vienna', 'Europe/Brussels', 'Europe/Berlin' ], N("Belgium") => [ 'Europe/Brussels', 'Europe/Paris', 'Europe/Berlin' ], N("Brazil") => [ 'Brazil/East' ], N("Canada") => [ 'Canada/Atlantic', 'Canada/Eastern' ], N("Czech Republic") => [ 'Europe/Prague', 'Europe/Berlin' ], N("Denmark") => [ 'Europe/Copenhagen', 'Europe/Berlin' ], N("Estonia") => [ 'Europe/Tallinn', 'Europe/Helsinki' ], N("Finland") => [ 'Europe/Helsinki', 'Europe/Tallinn' ], N("France") => [ 'Europe/Paris', 'Europe/Brussels', 'Europe/Berlin' ], N("Germany") => [ 'Europe/Berlin', 'Europe/Prague' ], N("Greece") => [ 'Europe/Athens', 'Europe/Prague' ], N("Hungary") => [ 'Europe/Budapest' ], N("Ireland") => [ 'Europe/Dublin', 'Europe/London' ], N("Israel") => [ 'Asia/Tel_Aviv' ], N("Italy") => [ 'Europe/Rome', 'Europe/Brussels', 'Europe/Paris' ], N("Japan") => [ 'Asia/Tokyo', 'Asia/Seoul' ], N("Netherlands") => [ 'Europe/Amsterdam', 'Europe/Brussels', 'Europe/Berlin' ], N("New Zealand") => [ 'Pacific/Auckland' ], N("Norway") => [ 'Europe/Oslo', 'Europe/Stockholm' ], N("Poland") => [ 'Europe/Warsaw' ], N("Portugal") => [ 'Europe/Lisbon', 'Europe/Madrid' ], N("Russia") => [ 'Europe/Moscow', ], N("Slovakia") => [ 'Europe/Bratislava' ], N("South Africa") => [ 'Africa/Johannesburg' ], N("Spain") => [ 'Europe/Madrid', 'Europe/Lisbon' ], N("Sweden") => [ 'Europe/Stockholm', 'Europe/Oslo' ], N("Switzerland") => [ 'Europe/Zurich', 'Europe/Berlin', 'Europe/Brussels' ], N("Taiwan") => [ 'Asia/Taipei', 'Asia/Seoul' ], N("Thailand") => [ 'Asia/Bangkok', 'Asia/Seoul' ], N("United States") => [ 'America/New_York', 'Canada/Atlantic', 'Asia/Tokyo', 'Australia/Sydney', 'Europe/Paris' ], ); %static_mirrors = ( # "ackbar" => [ "Ackbar", "/updates", "a", "a" ], ); %mirrors = (); sub mirror2text { $mirrors{$_[0]} && $mirrors{$_[0]}[0] . '|' . $_[0] } sub mirrors { my ($o_distro_type, $o_use_local_list) = @_; unless (keys %mirrors) { my $f; if ($o_use_local_list) { $f = \*DATA; } else { #- contact the following URL to retrieve the list of mirrors. require http; $f = http::getFile("http://www.mandrivalinux.com/mirrorsfull.list"); } local $SIG{ALRM} = sub { die "timeout" }; $o_use_local_list or alarm 60; my $distro_type = $o_distro_type || 'updates'; my $sub_dir = $distro_type =~ /cooker|community/ ? '' : '/' . version() . '/main_updates'; my $strict_arch; my $our_arch = MDK::Common::System::arch(); my %arch_mirror; foreach (<$f>) { my ($arch, $url, $dir) = m|$distro_type([^:]*):ftp://([^/]*)(/\S*)| or next; $strict_arch && $arch eq $strict_arch and next; MDK::Common::System::compat_arch($arch) or next; $arch eq $our_arch and $strict_arch = $arch; my $land = N("United States"); foreach (keys %url2land) { my $qu = quotemeta $_; $url =~ /\.$qu(?:\..*)?$/ and $land = $url2land{$_}; } $mirrors{$url} = [ $land, $dir . $sub_dir ]; $arch_mirror{$url} = $arch; } if (defined $strict_arch) { delete @mirrors{grep { $arch_mirror{$_} ne $strict_arch } keys %arch_mirror}; } unless ($o_use_local_list) { http::getFile('/XXX'); #- close connection. alarm 0; } #- now add static mirror (in case of something wrong happened above). add2hash(\%mirrors, \%static_mirrors); } keys %mirrors; } sub bestMirror { my ($string, $o_distro_type) = @_; my %mirror2value; foreach my $url (mirrors($o_distro_type)) { my $value = 0; my $cvalue = mirrors($o_distro_type); $mirror2value{$url} ||= 1 + $cvalue; foreach (@{$land2tzs{$mirrors{$url}[0]} || []}) { $_ eq $string and $mirror2value{$url} > $value and $mirror2value{$url} = $value; (split '/')[0] eq (split '/', $string)[0] and $mirror2value{$url} > $cvalue and $mirror2value{$url} = $cvalue; ++$value; } } my $min_value = min(values %mirror2value); my @possible = (grep { $mirror2value{$_} == $min_value } keys %mirror2value) x 2; #- increase probability push @possible, grep { $mirror2value{$_} == 1 + $min_value } keys %mirror2value; $possible[rand @possible]; } #- hack to retrieve Mandriva Linux version... XXX figure out something more robust sub version() { require pkgs; my $pkg = pkgs::packageByName($::o->{packages}, 'mandriva-release'); my $v = $pkg && $pkg->version || '10.2'; #- safe but dangerous ;-) $v eq '2006.0' and $v = '10.2'; $v; } sub dir { $mirrors{$_[0]}[1] } sub getFile { my ($file, $o_host) = @_; my $host = $o_host || $crypto::host; my $dir = dir($host); log::l("getting crypto file $file on directory $dir with login $mirrors{$host}[2]"); my ($ftp, $retr) = ftp::new($host, $dir, if_($mirrors{$host}[2], $mirrors{$host}[2]), if_($mirrors{$host}[3], $mirrors{$host}[3]) ); $$retr->close if $$retr; $$retr = $ftp->retr($file) or ftp::rewindGetFile(); $$retr ||= $ftp->retr($file); } sub getPackages { my ($packages, $mirror) = @_; $crypto::host = $mirror; #- get pubkey file first as we cannot handle 2 files opened simultaneously. my $pubkey; eval { my $fpubkey = getFile("media_info/pubkey", $mirror); $pubkey = [ $packages->parse_armored_file($fpubkey) ]; }; #- check first if there is something to get... my $fhdlist = getFile("media_info/hdlist.cz", $mirror); unless ($fhdlist) { log::l("no updates available, bailing out"); return; } #- extract hdlist of crypto, then depslist. require pkgs; my $update_medium = pkgs::psUsingHdlist('ftp', $packages, "hdlist-updates.cz", "1u", "", "Updates for Mandriva Linux " . version(), 1, $fhdlist, $pubkey); if ($update_medium) { log::l("read updates hdlist"); #- keep in mind where is the URL prefix used according to mirror (for install_any::install_urpmi). $update_medium->{prefix} = "ftp://$mirror" . dir($mirror); #- (re-)enable the medium to allow install of package, #- make it an update medium (for install_any::install_urpmi). $update_medium->select; $update_medium->{update} = 1; $install_any::global_ftp_prefix = [ $mirror, dir($mirror) ]; #- host, dir (for install_any::getFile) #- search for packages to update. $packages->{rpmdb} ||= pkgs::rpmDbOpen(); pkgs::selectPackagesToUpgrade($packages, $update_medium); } return $update_medium; } 1; #- mirror list, hardcoded here to be used in mini-cds (ftp suppl. media) __DATA__ communityi586:ftp://ftp-linux.cc.gatech.edu/pub/linux/distributions/mandrake/devel/community/i586/media/main communityi586:ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://ftp.gwdg.de/pub/linux/mandrakelinux/devel/community/i586/media/main communityi586:ftp://ftp.join.uni-muenster.de/pub/linux/distributions/mandrake-devel/community/i586/media/main communityi586:ftp://ftp.lip6.fr/pub/linux/distributions/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://ftp.nluug.nl/pub/os/Linux/distr/Mandrake/devel/community/i586/media/main communityi586:ftp://ftp.proxad.net/pub/Distributions_Linux/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://ftp.sunet.se/pub/Linux/distributions/mandrakelinux/devel/community/i586/media/main communityi586:ftp://ftp.surfnet.nl/pub/os/Linux/distr/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://ftp.tugraz.at/mirror/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://ftp.u-strasbg.fr/pub/linux/distributions/mandrakelinux/devel/community/i586/media/main communityi586:ftp://ftp.uninett.no/pub/unix/Linux/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://gd.tuwien.ac.at/pub/linux/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://jungle.metalab.unc.edu/pub/Linux/distributions/mandrake/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://mandrake.contactel.cz/Mandrakelinux/devel/community/i586/media/main communityi586:ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/mandrake-devel/community/i586/media/main communityx86_64:ftp//ftp-linux.cc.gatech.edu/pub/linux/distributions/mandrake/devel/community/x86_64/media/main communityx86_64:ftp//ftp-stud.fht-esslingen.de/pub/Mirrors/Mandrakelinux/devel/community/x86_64/media/main communityx86_64:ftp//ftp.join.uni-muenster.de/pub/linux/distributions/mandrake-devel/community/x86_64/media/main communityx86_64:ftp//ftp.lip6.fr/pub/linux/distributions/Mandrakelinux/devel/community/x86_64/media/main communityx86_64:ftp//ftp.nluug.nl/pub/os/Linux/distr/Mandrake/devel/community/x86_64/media/main communityx86_64:ftp//ftp.proxad.net/pub/Distributions_Linux/Mandrakelinux/devel/community/x86_64/media/main communityx86_64:ftp//ftp.sunet.se/pub/Linux/distributions/mandrakelinux/devel/community/x86_64/media/main communityx86_64:ftp//ftp.surfnet.nl/pub/os/Linux/distr/Mandrakelinux/devel/community/x86_64/media/main communityx86_64:ftp//ftp.u-strasbg.fr/pub/linux/distributions/mandrakelinux/devel/community/x86_64/media/main communityx86_64:ftp//ftp.uninett.no/pub/unix/Linux/Mandrakelinux/devel/community/x86_64/media/main communityx86_64:ftp//gd.tuwien.ac.at/pub/linux/Mandrakelinux/devel/community/x86_64/media/main communityx86_64:ftp//mandrake.contactel.cz/Mandrakelinux/devel/community/x86_64/media/main cookeri586:ftp://anorien.csc.warwick.ac.uk/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://bo.mirror.garr.it/pub/mirrors/Mandrake/devel/cooker/i586/media/main cookeri586:ftp://fr2.rpmfind.net/linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.ale.org/pub/mirrors/mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.aso.ee/pub/Mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.belnet.be/packages/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.bylinux.net/pub/mirror/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.cica.es/pub/Linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.ciril.fr/pub/linux/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.cise.ufl.edu/pub/mirrors/mandrake/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.esat.net/pub/linux/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.fh-giessen.de/pub/linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.fh-wolfenbuettel.de/linux/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.free.fr/mirrors/ftp.mandriva.com/MandrivaLinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.gtlib.cc.gatech.edu/pub/mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.heanet.ie/pub/mandrake/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.icm.edu.pl/pub/linux/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.informatik.hu-berlin.de/pub/Linux/Distributions/Mandrake/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.int-evry.fr/pub/linux/mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.is.co.za/linux/distributions/mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.isu.edu.tw/pub/Linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.isu.net.sa/pub/mirrors/ftp.mandrake.com/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.join.uni-muenster.de/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.kddlabs.co.jp/Linux/packages/Mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.mandrake.ikoula.com/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.nara.wide.ad.jp/pub/Linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.ndlug.nd.edu/pub/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.neva.ru/Linux-Distrib/Mandrake/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.nluug.nl/pub/os/Linux/distr/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.pbone.net/pub/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.phys.ttu.edu/pub/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.physics.auth.gr/pub/mirrors/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.planetmirror.com/pub/Mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.ps.pl/mirrors/mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.rediris.es/pub/linux/distributions/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.riken.go.jp/pub/Linux/mandrake/devel/cooker/i586/media/main cookeri586:ftp://ftp.rutgers.edu/pub/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.sunet.se/pub/Linux/distributions/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.sunsite.org.uk/package/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.surfnet.nl/pub/os/Linux/distr/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.tu-chemnitz.de/pub/linux/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.tuniv.szczecin.pl/pub/linux/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.uasw.edu/linux/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.uio.no/linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.uni-bayreuth.de/pub/linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.uninett.no/linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp.vat.tu-dresden.de/pub/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ftp3.mandrake.sk/mirrors/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://gd.tuwien.ac.at/pub/linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://helios.dii.utk.edu/pub/linux/Mandrake/devel/cooker/i586/media/main cookeri586:ftp://linux.ntcu.net/dists/mandrake/devel/cooker/i586/media/main cookeri586:ftp://linux.ups-tlse.fr/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://mandrake.contactel.cz/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://mdk.linux.org.tw/pub/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://mirror.averse.net/pub/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://mirror.etf.bg.ac.yu/distributions/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://mirror.fis.unb.br/pub/linux/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://mirror.mandrakelinux.cn/FreeOS/MandrivaLinux/devel/cooker/i586/media/main cookeri586:ftp://mirror.switch.ch/mirror/mandrake/devel/cooker/i586/media/main cookeri586:ftp://mirror.umr.edu/pub/linux/mandrake/Mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://ramses.wh2.tu-dresden.de/pub/mirrors/mandrake/devel/cooker/i586/media/main cookeri586:ftp://sunsite.cnlab-switch.ch/mirror/mandrake/devel/cooker/i586/media/main cookeri586:ftp://sunsite.icm.edu.pl/pub/Linux/mandrakelinux/devel/cooker/i586/media/main cookeri586:ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/mandrake/devel/cooker/i586/media/main cookeri586:ftp://sunsite.mff.cuni.cz/OS/Linux/Dist/Mandrake/mandrake/devel/cooker/i586/media/main cookerppc:ftp://ftp-linux.cc.gatech.edu/pub/linux/distributions/mandrake/devel/cooker/ppc/media/main cookerppc:ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/Mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://ftp.club-internet.fr/pub/unix/linux/distributions/Mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://ftp.gwdg.de/pub/linux/mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://ftp.join.uni-muenster.de/pub/linux/distributions/mandrake-devel/cooker/ppc/media/main cookerppc:ftp://ftp.nluug.nl/pub/os/Linux/distr/Mandrake/devel/cooker/ppc/media/main cookerppc:ftp://ftp.proxad.net/pub/Distributions_Linux/Mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://ftp.sunet.se/pub/Linux/distributions/mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://ftp.surfnet.nl/pub/os/Linux/distr/Mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://ftp.tugraz.at/mirror/Mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://ftp.uninett.no/pub/unix/Linux/Mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://gd.tuwien.ac.at/pub/linux/Mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://mandrake.contactel.cz/Mandrakelinux/devel/cooker/ppc/media/main cookerppc:ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/mandrake-devel/cooker/ppc/media/main cookerx86_64:ftp://anorien.csc.warwick.ac.uk/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://bo.mirror.garr.it/pub/mirrors/Mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://fr2.rpmfind.net/linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.ale.org/pub/mirrors/mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.aso.ee/pub/Mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.belnet.be/packages/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.cica.es/pub/Linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.ciril.fr/pub/linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.esat.net/pub/linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.fh-giessen.de/pub/linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.fh-wolfenbuettel.de/linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.free.fr/mirrors/ftp.mandriva.com/MandrivaLinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.gtlib.cc.gatech.edu/pub/mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.heanet.ie/pub/mandrake/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.icm.edu.pl/pub/linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.informatik.hu-berlin.de/pub/Linux/Distributions/Mandrake/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.is.co.za/linux/distributions/mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.isu.net.sa/pub/mirrors/ftp.mandrake.com/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.join.uni-muenster.de/pub/linux/distributions/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.lip6.fr/pub/linux/distributions/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.mandrake.ikoula.com/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.nara.wide.ad.jp/pub/Linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.nluug.nl/pub/os/Linux/distr/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.phys.ttu.edu/pub/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.physics.auth.gr/pub/mirrors/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.planetmirror.com/pub/Mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.ps.pl/mirrors/mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.rediris.es/pub/linux/distributions/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.riken.go.jp/pub/Linux/mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.sunet.se/pub/Linux/distributions/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.surfnet.nl/pub/os/Linux/distr/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.tu-chemnitz.de/pub/linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.tuniv.szczecin.pl/pub/linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.uasw.edu/linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.uio.no/linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.uni-bayreuth.de/pub/linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.uninett.no/linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ftp.vat.tu-dresden.de/pub/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://gd.tuwien.ac.at/pub/linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://linux.ntcu.net/dists/mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://mdk.linux.org.tw/pub/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://mirror.etf.bg.ac.yu/distributions/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://mirror.fis.unb.br/pub/linux/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://mirror.umr.edu/pub/linux/mandrake/Mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://mirrors.usc.edu/pub/linux/distributions/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://ramses.wh2.tu-dresden.de/pub/mirrors/mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://raven.cslab.vt.edu/pub/linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://sunsite.icm.edu.pl/pub/Linux/mandrakelinux/devel/cooker/x86_64/media/main cookerx86_64:ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/mandrake/devel/cooker/x86_64/media/main cookerx86_64:ftp://sunsite.mff.cuni.cz/OS/Linux/Dist/Mandrake/mandrake/devel/cooker/x86_64/media/main officiali586:ftp://bo.mirror.garr.it/pub/mirrors/Mandrake/official/current/i586/media/main/ officiali586:ftp://carroll.cac.psu.edu/pub/linux/distributions/mandrakelinux/official/current/i586/media/main/ officiali586:ftp://chronos.iut-bm.univ-fcomte.fr/pub/linux/distributions/Mandrake/official/current/i586/media/main/ officiali586:ftp://fr2.rpmfind.net/linux/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp-stud.fht-esslingen.de/pub/Mirrors/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.ale.org/pub/mirrors/mandrake/official/current/i586/media/main/ officiali586:ftp://ftp.aso.ee/pub/Mandrake/official/current/i586/media/main/ officiali586:ftp://ftp.belnet.be/packages/mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.cica.es/pub/Linux/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.ciril.fr/pub/linux/mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.cise.ufl.edu/pub/mirrors/mandrake/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.club-internet.fr/pub/unix/linux/distributions/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.cru.fr/pub/linux/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.cse.buffalo.edu/pub/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.ens-cachan.fr/pub/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.esat.net/pub/linux/mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.fh-giessen.de/pub/linux/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.fh-wolfenbuettel.de/linux/mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.fi.muni.cz/pub/linux/mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.free.fr/mirrors/ftp.mandriva.com/MandrivaLinux/official/current/i586/media/main/ officiali586:ftp://ftp.fsn.hu/pub/linux/distributions/mandrake/official/current/i586/media/main/ officiali586:ftp://ftp.gtlib.cc.gatech.edu/pub/mandrake/official/current/i586/media/main/ officiali586:ftp://ftp.heanet.ie/pub/mandrake/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.iasi.roedu.net/mirrors/ftp.mandrake.com/official/current/i586/media/main/ officiali586:ftp://ftp.informatik.hu-berlin.de/pub/Linux/Distributions/Mandrake/Mandrakelinux/official/current/i586/media/main/ officiali586:ftp://ftp.int-evry.fr/pub/linux/mandrake/official/current/i586/media/main/ officiali586:ftp://ftp.is.co.za/linux/distributions/mandrake/official/current/i586/media/main/