summaryrefslogtreecommitdiffstats
path: root/globetrotter
diff options
context:
space:
mode:
Diffstat (limited to 'globetrotter')
-rw-r--r--globetrotter/.perl_checker4
-rw-r--r--globetrotter/Makefile91
-rw-r--r--globetrotter/README65
-rw-r--r--globetrotter/doc/BUGS6
-rw-r--r--globetrotter/doc/BUILD24
-rw-r--r--globetrotter/doc/NOTES17
-rw-r--r--globetrotter/hwprofile47
-rwxr-xr-xglobetrotter/make_live410
-rw-r--r--globetrotter/mandrake-globetrotter.spec45
-rw-r--r--globetrotter/move.pm171
-rwxr-xr-xglobetrotter/runstage230
11 files changed, 910 insertions, 0 deletions
diff --git a/globetrotter/.perl_checker b/globetrotter/.perl_checker
new file mode 100644
index 000000000..f6f9b3608
--- /dev/null
+++ b/globetrotter/.perl_checker
@@ -0,0 +1,4 @@
+Digest::base
+Gtk2::Gdk::Keysyms
+Net::Ping
+urpm \ No newline at end of file
diff --git a/globetrotter/Makefile b/globetrotter/Makefile
new file mode 100644
index 000000000..69f61b6b9
--- /dev/null
+++ b/globetrotter/Makefile
@@ -0,0 +1,91 @@
+PACKAGE=mandrake-globetrotter
+PKGVERSION:=$(shell rpm -q --qf '%{VERSION}\n' --specfile $(PACKAGE).spec|head -n 1)
+RELEASE:=$(shell rpm -q --qf '%{RELEASE}\n' --specfile $(PACKAGE).spec|head -n 1)
+TAG := $(shell echo "V$(PKGVERSION)_$(RELEASE)" | tr -- '-.' '__')
+
+DIRS=share/po
+PREFIX =
+
+SBINDIR = $(PREFIX)/usr/sbin
+LIBDIR = $(PREFIX)/usr/lib
+LIBDEST = $(LIBDIR)/libDrakX
+DATADIR = $(PREFIX)/usr/share
+
+LANG_FILES = pixmaps/langs
+DISTFILES = hwprofile *.spec share/po/*.po share/po/Makefile share/po/i18n_compssUsers Makefile Makefile.config *.pm runstage2 $(LANG_FILES)
+
+.PHONY: all install clean
+
+all:
+ rm -f share/po/DrakX.pot # force rebuild of po's
+ make -C share/po mofiles
+
+
+localcopy: clean
+ cd .. ; rm -rf $(PACKAGE)-$(PKGVERSION) ; cp -af globetrotter $(PACKAGE)-$(PKGVERSION)
+ # include pixmaps for language selector:
+ mkdir ../$(PACKAGE)-$(PKGVERSION)/{pixmaps,share}
+ cp -af ../perl-install/pixmaps/langs ../$(PACKAGE)-$(PKGVERSION)/pixmaps/langs
+ # include drakx modules for first time wizard :
+ # cp -af ../perl-install/share/po ../$(PACKAGE)-$(PKGVERSION)/share/
+ mkdir ../$(PACKAGE)-$(PKGVERSION)/share/po
+ # cp -af ../perl-install/share/po/{fr.po,Makefile,i18n_compssUsers} ../$(PACKAGE)-$(PKGVERSION)/share/po
+ cp -af ../perl-install/share/po/{*.po,Makefile,i18n_compssUsers} ../$(PACKAGE)-$(PKGVERSION)/share/po
+ # enable fast build:
+ perl -pi -e 's!^.*msgmerge.*\n!!' ../$(PACKAGE)-$(PKGVERSION)/share/po/Makefile
+ cp -af ../perl-install/{help,pkgs,install*}.pm ../$(PACKAGE)-$(PKGVERSION)/
+ echo 'ALLPMS = *.pm' > ../$(PACKAGE)-$(PKGVERSION)/Makefile.config
+ @make nuke_perl
+
+
+install:
+ install -d $(LIBDEST) $(DATADIR)/libDrakX/pixmaps/langs $(SBINDIR)
+ install -m 644 *.pm $(LIBDEST)
+ install -m 755 runstage2 $(SBINDIR)/mdkmove
+ cp -f pixmaps/langs/lang-*.png $(DATADIR)/libDrakX/pixmaps/langs
+ $(MAKE) -C share/po install PREFIX=$(PREFIX) SUDO= DATADIR=$(DATADIR) NAME=libDrakX2
+# %make -C po install SUDO= NAME=libDrakX2 LOCALEDIR=$(DEST)/usr/share/locale_special
+
+
+rpm: localrpm
+localrpm: localdist buildrpm
+
+srpm: localsrpm
+localsrpm: spec_test localdist buildsrpm
+
+localdist: cleandist localcopy tar
+
+cleandist:
+ rm -rf ../$(PACKAGE)-$(PKGVERSION) ../$(PACKAGE)-$(PKGVERSION).tar.bz2
+
+spec_test:
+ @if [[ -z "$(PKGVERSION)" ]]; then echo "unable to get spec version"; exit 3;fi
+ @if [[ -z "$(RELEASE)" ]]; then echo "unable to get spec release"; exit 2;fi
+
+tar:
+ cd ../$(PACKAGE)-$(PKGVERSION) && rm -rf debug.log `find -name CVS`
+ cd ..; tar cfj $(PACKAGE)-$(PKGVERSION).tar.bz2 $(patsubst %,$(PACKAGE)-$(PKGVERSION)/%,$(DISTFILES))
+ #cd ..; rm -rf $(PACKAGE)-$(PKGVERSION)
+
+buildrpm:
+ rpm -ta ../$(PACKAGE)-$(PKGVERSION).tar.bz2
+
+buildsrpm:
+ rpm -ts --nodeps ../$(PACKAGE)-$(PKGVERSION).tar.bz2
+
+# rules to build a distributable rpm
+
+dist: cleandist export tar
+
+export:
+ cd ..; cvs export -d $(PACKAGE)-$(PKGVERSION) -r $(TAG) $(PACKAGE)
+ cd ../$(PACKAGE)-$(PKGVERSION)
+ cd ..;
+ @make nuke_perl
+
+nuke_perl:
+ find ../$(PACKAGE)-$(PKGVERSION) -name '*.pm' | xargs perl -pi -e 's/\s*use\s+(diagnostics|strict|vars|warnings).*//g'
+
+img:
+ /usr/bin/lilo-bmp2mdk mode:0x103 progress:397,190,14,6,64+8 clear:600,800,64+8 pos:0,0 < BOOTGTROTTER-install-lilo-8bis.bmp > isolinux_boot.msg
+
diff --git a/globetrotter/README b/globetrotter/README
new file mode 100644
index 000000000..3c6509b36
--- /dev/null
+++ b/globetrotter/README
@@ -0,0 +1,65 @@
+ Mandrakelinux GlobeTrotter, powered by LaCie Mobile Hard Drive project
+ ======================================================================
+
+
+
+Requirements:
+=============
+
+1) packages:
+------------
+
+you need to have the distro repositery mounted in /export.
+
+on top of the mdk10.0 base + its updates, the following packages were
+updated from cooker:
+
+- misc bug fixes:
+ o drakconf-10-13mdk
+ o {drakxtools,harddrake}*-10-34mdk
+ o mdkonline-1.0-7mdk
+ o menudrake-0.7.4-8mdk
+ o netprofile-0.6.3-1.1mdk (for fixed profiles)
+ o perl-Libconf*-0.33-2mdk
+ o rpmdrake-2.1.3-4mdk
+ o initscripts-7.06-49.1mdk:
+ * usb starting when usb host drivers were loaded by initrd
+ * globetrotter support
+- root=LABEL=foobar and boot from USB support:
+ o mkinitrd-3.5.18-10mdk
+ o bootloader-utils-1.7-1mdk
+- coexistance:
+ o glibc with /etc/ld.so.conf.d/ support
+ o ATI driver
+ o NIVIDIA driver
+- new packages:
+ o kdetv, libkdevideo
+- should we also take new kernel?
+
+Note: once you've updated some packages, you need to run "gendistrib
+ /export".
+
+
+2) local checkout of drakx:
+---------------------------
+
+you need a copy of gi/perl-install in ../perl-install as well as
+gi/mdk-stage1.
+
+you need to install the following packages: gcc, e2fsprogs,
+ldetect-devel, libext2fs2-devel, libxfree86-devel, perl-devel,
+perl-URPM, rpm-devel, rpmtools, and urpmi.
+
+then you need to type "make c" in ../perl-install.
+
+last but not least, you need to copy list_modules from gi/kernel into
+perl-instéall and gi/mdk-stage1/pcmcia_/probe.c into perl-install/c.
+
+
+
+Building the hd image:
+======================
+
+just type ./make_live
+
+it'll reformat the hard disk, mount it and install packages \ No newline at end of file
diff --git a/globetrotter/doc/BUGS b/globetrotter/doc/BUGS
new file mode 100644
index 000000000..97ff5d8b0
--- /dev/null
+++ b/globetrotter/doc/BUGS
@@ -0,0 +1,6 @@
+-*- outline -*-
+
+* drakboot and diskdrake are not yet fully capable of managing LABEL= in
+/tc/fstab
+
+* lilo failed to boot from USB
diff --git a/globetrotter/doc/BUILD b/globetrotter/doc/BUILD
new file mode 100644
index 000000000..5dbba396e
--- /dev/null
+++ b/globetrotter/doc/BUILD
@@ -0,0 +1,24 @@
+ How to build Mandrakelinux Globetrotter:
+ ========================================
+
+- you need first to install all the drakxtools' build dependancies
+ (thus running "urpmi /SRPMS/drakxtools-*" may be quite helpful)
+
+- copy the mdk10.0 DVD in /export
+- leave main as Mandrake/RPMS
+- copy h[cs]f*, FlashPlayer*, RealPlayer* into Mandrake/RPMS from Mandrake/RPMS[23]
+- move contribs as Mandrake/RPMS2
+- move other RPMS? somewhere else
+- add packages from ~tv/rpm/lacie on cluster
+- add updates from /mnt/BIG/dis/updates/10.0
+- add updated proprietary packages for kernel update from kameha
+ (nplanel's work machine):
+ echo "mget *2.4.25.5mdk* *2.6.3.13mdk*" | \
+lftp -u a,a ftp://kameha:/~/../nplanel/rpm/prop/RPMS/i586/
+- run the following in order to remove duplicated packages:
+ doble [A-Z] | xargs rm -f
+ doble [a-g] | xargs rm -f
+ doble [h-z] | xargs rm -f
+- plug the LaCie disk
+- run make_live --partition --format --install --post in order to
+ prepare the disk
diff --git a/globetrotter/doc/NOTES b/globetrotter/doc/NOTES
new file mode 100644
index 000000000..5a43af0e2
--- /dev/null
+++ b/globetrotter/doc/NOTES
@@ -0,0 +1,17 @@
+ Mandrakelinux GlobeTrotter release notes
+
+
+
+* Arabic support
+
+
+you may want to enable the acon service from the acon package.
+Just type: "chkconfig --add jserver" as root or use the "Services"
+icon from the Mandrakelinux Control Center
+
+
+* Japanese support
+
+you may want to enable the jserver service from the FreeWnn package.
+Just type: "chkconfig --add jserver" as root or use the "Services"
+icon from the Mandrakelinux Control Center \ No newline at end of file
diff --git a/globetrotter/hwprofile b/globetrotter/hwprofile
new file mode 100644
index 000000000..32cb99efe
--- /dev/null
+++ b/globetrotter/hwprofile
@@ -0,0 +1,47 @@
+#!/usr/bin/perl
+
+# Copyright (c) 2004 MandrakeSoft
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+use lib qw(/usr/lib/libDrakX);
+
+use common;
+use standalone;
+use Digest::MD5 qw(md5_hex);
+use network::tools;
+use network::netconnect;
+
+# md5_hex call came from move::machine_ident() :
+my $id = "MDK" . md5_hex(join("", (map { (split)[1] } cat_("/proc/bus/pci/devices"))));
+
+my $netcnx = {};
+my $is_first_boot = !glob_("/etc/netprofile/profiles/MDK*");
+
+# create hardware profile if needed:
+if (! -d "/etc/netprofile/profiles/$id") {
+ network::tools::reread_net_conf($netcnx, {}, {});
+ network::netconnect::add_profile($netcnx, $id);
+}
+
+# restore hardware profile:
+$netcnx->{PROFILE} = $id;
+eval { network::netconnect::set_profile($netcnx) };
+
+# first boot wizard:
+$is_first_boot and system('/usr/sbin/mdkmove');
+
+# redo ldconfig cache for libGL (since we've both ATI and NVIDIA GLX packages):
+system("/sbin/ldconfig");
diff --git a/globetrotter/make_live b/globetrotter/make_live
new file mode 100755
index 000000000..4f5a6e2ef
--- /dev/null
+++ b/globetrotter/make_live
@@ -0,0 +1,410 @@
+#!/usr/bin/perl
+
+$::isInstall = 1; # for /root/drakx/ddebug.log
+
+use strict;
+#use lib qw(/usr/lib/libDrakX);
+use lib "../perl-install";
+use standalone;
+use interactive;
+use common;
+use partition_table;
+use fsedit;
+use fs;
+use any;
+use pkgs;
+use class_discard;
+use run_program;
+use log;
+
+# my $in = interactive->vnew;
+
+$::isStandalone = undef; # for /tmp/ddebug.log
+
+my (%options, @new_ARGV);
+
+foreach (@ARGV) {
+ if (/^--(.*)/) {
+ $options{$1} = 1;
+ } else {
+ push @new_ARGV, $_;
+ }
+}
+
+@ARGV = @new_ARGV;
+
+my @suggestions = (
+ { mntpoint => "/", size => 4500 << 11, type => 0x483, ratio => 1, maxsize => 6000 << 11 },
+ # splited / and /usr:
+ # { mntpoint => "/", size => 250 << 11, type => 0x483, ratio => 1, maxsize => 2000 << 11 },
+ # { mntpoint => "/usr", size => 300 << 11, type => 0x483, ratio => 4, maxsize => 4000 << 11 },
+ { mntpoint => "/home", size => 100 << 11, type => 0x483, ratio => 3 },
+
+ # share partition with windows:
+ { mntpoint => "/mnt/share", size => 2000 << 11, type => 0xb, ratio => 2, maxsize => 10000 << 11 },
+ { mntpoint => "/mnt/packages", size => 7500 << 11, type => 0x483, ratio => 3, maxsize => 7500 << 11 },
+ # allocated last b/c end of disk is usually faster:
+ { mntpoint => "swap", size => 64 << 11, type => 0x82, ratio => 1, maxsize => 500 << 11 },
+ );
+
+
+sub get_hds() {
+ my $all_hds = fsedit::get_hds();
+ my $other;
+ ($all_hds->{hds}, $other) = partition { $_->{usb_description} eq 'LaCie|LaCie Hard Drive USB' } @{$all_hds->{hds}};
+ $all_hds, $all_hds->{hds}[0]; # $other
+}
+
+
+sub prepare_disk() {
+ # repartion the hard disk:
+ print "PARTITIONNING\n";
+ my ($all_hds, $hd, $other) = get_hds();
+ # partition_table::remove($hd, $_) while partition_table::get_normal_parts($hd);
+ run_program::run("swapoff", "/dev/$all_hds->{hds}[0]{device}8") if any { /$all_hds->{hds}[0]{device}/ } cat_("/proc/partitions");
+
+ partition_table::raw::zero_MBR_and_dirty($hd);
+ fsedit::allocatePartitions($all_hds, \@suggestions);
+ require diskdrake::interactive;
+ require class_discard;
+ # diskdrake::interactive::write_partitions(class_discard->new, $_, 'skip_check_rebootNeeded') foreach (@{$all_hds->{hds}});
+ foreach (@{$all_hds->{hds}}) {
+ local $::isStandalone = undef;
+ print "WRITE PARTITION ON $_->{file}\n";
+ diskdrake::interactive::write_partitions(class_discard->new, $_, 'skip_check_rebootNeeded')
+ }
+ # partition_table::write(@{$all_hds->{hds}});
+ ($all_hds, $hd, $other);
+}
+
+
+sub formatdisk {
+ my ($hd) = @_;
+ print "FORMATTING\n";
+ foreach (partition_table::get_normal_parts($hd)) {
+ print qq(Formatting "$_->{device}" ($_->{mntpoint})\n);
+ fs::format_part(undef, $_, $::prefix, undef) if !$::testing;
+ }
+}
+
+
+#@ARGV <= 1 or die "usage: make_live [live_location=/tmp/live_tree]\n";
+
+ if (!find { m!/proc/bus/usb! } run_program::get_stdout('mount')) {
+ warn "USB service is *NOT* started";
+ run_program::get_stdout('service', 'usb', 'start');
+ }
+
+
+my $kernel_version = do {
+ #my @l = glob_('/export/Mandrake/RPMS/kernel-enterprise-2.6*');
+ my @l = glob_('/export/Mandrake/RPMS/kernel-2.6*');
+ @l >= 1 or die "can't find kernel";
+ @l <= 1 or die "too many kernels";
+ first(`rpm -qp --qf '%{name}' $l[0]` =~ /kernel-(.*)/);
+};
+
+
+sub installPackages() {
+ local $::testing = undef;
+
+ # for a gconftool-2 cleaner:
+ my $pid = fork();
+ !defined $pid and die("cannot fork: $!");
+ !$pid and do {
+ while (1) {
+ sleep(10);
+ run_program::run('/usr/bin/killall', 'gconftool-2');
+ }
+ };
+ my $_b = before_leaving { print "KILLING\n"; kill 'TERM', $pid if $pid };
+
+ # ensure no %_install_langs:
+ output_p("$::prefix/etc/rpm/macros", "%_install_langs all\n");
+ # ensure boot from USB will work:
+ output_p("$::prefix/etc/sysconfig/mkinitrd", "forceusb=yes\n");
+
+ mkdir_p("$::prefix/var/lib/rpm");
+ mkdir_p("$::prefix/root/drakx");
+
+
+ undef *install_any::setDefaultPackages;
+ *install_any::setDefaultPackages = sub {};
+
+ undef *install_any::getFile;
+ *install_any::getFile = sub {
+ my ($f, $o_method) = @_;
+ log::l("getFile $f:$o_method");
+ open(my $F, '/export/' . install_any::relGetFile($f)) or return;
+ $F;
+ };
+
+ undef *c::kernel_version;
+ *c::kernel_version = sub { $kernel_version };
+
+ print "INSTALLING\n";
+ install_any::setPackages(my $o = $::o =
+ {
+ prefix => $::prefix,
+ meta_class => 'desktop',
+ default_packages => [
+ qw(XFree86-server XFree86-xfs XFree86-FBDev),
+ qw(openssh-server), #- fred wants it
+ qw(alsa-utils cdialog newt),
+ qw(k3b-dvd),
+ qw(davfs nfs-utils samba-server sane-backends xsane xsane-gimp ntp),
+ qw(acpi acpid), #- so that removing acpi=ht will work
+ qw(mountloop), #- crypted folders
+ qw(mandrake-doc-en mandrake-doc-fr mandrake-doc-drakxtools-en mandrake-doc-drakxtools-fr),
+ qw(synaptics),
+ #- network conf:
+ qw(wireless-tools pcmcia-cs),
+ #- zeroconf:
+ qw(zcip dhcpcd tmdns),
+ #- cnx stuff:
+ qw(dhcp-client ppp kdenetwork-kppp ppp-pppoatm ppp-pppoe pptp-linux pptp-adsl rp-pppoe),
+ #- ISDN stuff:
+ # qw(isdn4net ibod isdn4k-utils), # not installed since it provides an interface (will be automatically installed by drakconnect)
+ #- network file sharing:
+ qw(nfs-utils-clients samba-client),
+ #- network drivers and firmwares:
+ qw(eagle-usb speedtouch speedtouch_mgmt unicorn),
+ #- alt kernels:
+ # glob_('/export/Mandrake/RPMS/kernel-2.4*'), #- for ISDN
+ #- configuration:
+ qw(drakconf drakcronat drakfirsttime drakxtools harddrake-ui mdkonline rpmdrake userdrake2),
+ qw(cups cups-drivers foomatic-db gimpprint hpoj libnet-snmp mtools mtoolsfm nmap printer-filters printer-testpages printer-utils scli xojpanel xpp), #- printer stuff
+ "ATI_kernel-$kernel_version", qw(ATI_GLX ATI_GLX-utils NVIDIA_GLX libMesaGLU1), # ATI_GLX requires ATI_kernel
+ "NVIDIA_kernel-$kernel_version",
+ # qw(hcfpcimodem hsflinmodem ltmodem), #- 2.4.x only
+ qw(xinput), #- for some mice
+ qw(bash-completion binutils emacs-X11 ntsysv perl-doc perl-Term-Readline-Gnu), #- allow debugging
+ qw(openssh-askpass-gnome), #- openssh-askpass for mountloop doesn't allow to click on ok/cancel buttons
+ qw(clanbomber freeciv-client freeciv-server crack-attack kdegames), #- more games
+ qw(numlock), # shorewall # not installed since its default config breaks network (will be automatically installed by drakfirewall)
+ qw(xawtv zapping), #- tv apps
+ qw(scribus scribus-i18n-de scribus-i18n-fr), #- John Jablonski says it's so much useful
+ (map { "OpenOffice.org-l10n-$_" } qw(ar ca cs da de el en es eu fi fr it ja ko nl pl pt pt_BR ru sk sv tr zh_CN zh_TW)),
+ qw(dosfstools mtools),
+ qw(koffice konsole),
+ qw(devfsd dynamic harddrake hotplug magicdev mandrake-globetrotter netprofile),
+ qw(gnome2),
+ qw(alsa-utils),
+ qw(ipw2100 ipw2100_kernel), # ipw2100_kernel-$kernel_version,
+ #- fonts:
+ qw(XFree86-100dpi-fonts XFree86-75dpi-fonts),
+ qw(fonts-bitmap-tscii fonts-hebrew-elmar),
+ (map { "fonts-ttf-$_" } qw(arabic armenian bengali big5 decoratives ethiopic gb2312 japanese kannada korean latex tamil thai tscii vera west_european)),
+ (map { "fonts-type1-$_" } qw(cyrillic greek hebrew)),
+ ],
+ });
+
+ my %compssUsersChoice = map { $_ => 1 } map { @{$_->{flags}} } values %{$o->{compssUsers}};
+ $compssUsersChoice{$_} = 1 foreach 'SYSTEM', 'DVD', 'USB', 'SOUND', 'BURNER', 'UTF8', 'DOCS', 'TV', '3D', 'INSTALL';
+ $compssUsersChoice{qq(LOCALES"$_")} = 1 foreach lang::langsLANGUAGE({ all => 1 });
+
+ pkgs::setSelectedFromCompssList($o->{packages}, \%compssUsersChoice, 4, 0);
+ use Data::Dumper;
+ output("/tmp/pkgs1", Dumper($o->{packages}));
+
+ # unselect some packages whose services fsck up the box and whose services are not enabled by appropriate tools:
+ # (shorewall must be deselected before iptables is)
+ foreach (qw(at hpoj shorewall iptables ntp tmdns zcip )) {
+ my $p = pkgs::packageByName($o->{packages}, $_);
+ pkgs::unselectPackage($o->{packages}, $p) if $p;
+ }
+
+ my @toInstall = pkgs::packagesToInstall($o->{packages});
+ output("/tmp/pkgs2", Dumper([ map { $_->name } @toInstall ]));
+ local $ENV{DURING_INSTALL} = 1;
+ $ENV{LD_LIBRARY_PATH} = "/lib:/usr/lib:/usr/X11R6/lib:/usr/lib/qt3/lib";
+ pkgs::install($::prefix, 0, \@toInstall, $o->{packages});
+
+ eval { fs::umount("$::prefix/proc") };
+}
+
+sub config_X_proprietary_drivers() {
+ unlink "$::prefix/usr/lib/libGL.so";
+
+ my %name_to_Driver = (NVIDIA_GLX => 'nvidia', ATI_GLX => 'fglrx');
+
+ my $lib = 'libGL.so.1';
+ symlinkf("/etc/X11/$lib", "$::prefix/usr/lib/$lib");
+ foreach (keys %name_to_Driver) {
+ my ($full_name) = run_program::rooted_get_stdout($::prefix, 'rpm', '-ql', $_) =~ m!/usr/lib/(\Q$lib\E\..*)! or die '';
+ symlinkf($full_name, "$::prefix/usr/lib/$lib.$name_to_Driver{$_}");
+ }
+ #- remove the dirty hack done by NVIDIA_kernel-xxx proprietary package
+ #- we do it by hand when needed
+ substInFile { $_ = '' if $_ eq 'nvidia' } "$::prefix/etc/modules";
+}
+
+$::prefix = $ARGV[0] || '/tmp/live_tree';
+
+-d $::prefix or mkdir $::prefix;
+print "Making live in $::prefix directory.\n";
+
+
+my ($all_hds, $hd, $other) = do {
+ # here we want testing so that diskdrake still set mount points in data structure:
+ local $::testing = !$options{partition};
+ prepare_disk();
+};
+
+formatdisk($hd) if $options{format};
+
+add2hash($hd, $other);
+
+undef $::testing;
+
+my @parts = partition_table::get_normal_parts($hd);
+
+my ($root) = grep { $_->{mntpoint} eq "/" } @parts;
+print "Root is $root->{device}\n";
+run_program::run('tune2fs', '-L', "MDK-ROOT", "/dev/$root->{device}");
+# fs::mount_part($root, $::prefix);
+my $fstab = [ fsedit::get_all_fstab($all_hds) ];
+
+# we need to mount every fs we want to see into /etc/fstab !!!
+fs::mount_part($_, $::prefix) foreach sort { $a->{mntpoint} cmp $b->{mntpoint} } @$fstab;
+
+
+eval {
+ print "Installing packages\n";
+ installPackages();
+} if $options{install};
+print "ERROR WHILE INSTALLING PACKAGES: $@\n" if $@;
+log::closeLog;
+
+sub doRootSubst {
+ my ($file) = @_;
+ substInFile {
+ s!/dev/$root->{device}!LABEL=MDK-ROOT!g;
+ } $file;
+}
+
+#fs::merge_info_from_mtab($fstab);
+fs::write_fstab($all_hds, $::prefix);
+append_to_file("$::prefix/etc/fstab", "none /dev/pts devpts mode=0620 0 0");
+doRootSubst("$::prefix/etc/fstab");
+
+#-------------------------------------------------------------------
+#- Bootloader
+print "Configuring bootloader\n";
+system("modprobe loop");
+require keyboard;
+require bootloader;
+
+my $bootloader = {
+ keytable => keyboard::keyboard2kmap(keyboard::lang2keyboard('fr')),
+ bios => { '/dev/sda' => '0x80' },
+ };
+
+bootloader::suggest($bootloader, $all_hds->{hds}, $fstab,
+ vga_fb => 788,
+ quiet => 1);
+
+# LILO failled to boot from SCSI:
+# $bootloader->{method} = 'lilo-graphic';
+$bootloader->{method} = 'grub';
+
+bootloader::install($bootloader, $fstab, $all_hds->{hds});
+
+doRootSubst("$::prefix/boot/grub/menu.lst");
+run_program::rooted($::prefix, 'sh', '/boot/grub/install.sh');
+
+# fix GRUB configuration:
+substInFile {
+ # use FB by default on versionned entries so that the initial versionned entry behave like those created by /sbin/installkernel:
+ s/$/ vga=788/ if /^kernel.*\d\.\d\.\d/;
+ # set devfs=mount as well so that installkernel can properly install bootable 2.4.x kernels:
+ s/$/ devfs=mount/ if /^kernel/ && !/failsafe/;
+} "$::prefix/boot/grub/menu.lst";
+
+
+## disable ISDN by default (bogus isdn4net came with an enabled interface :-():
+#substInFile {
+# s/#ONBOOT.*/ONBOOT="no"/
+#} "$::prefix/etc/sysconfig/network-scripts/ifcfg-ippp0";
+#
+
+print "Post install misc configuration\n";
+
+
+# clean services:
+# cups-lpd ibod isdn4linux isdnlog)) {
+run_program::rooted($::prefix, '/sbin/chkconfig', '--del', $_) foreach qw(acon jserver oki4daemon);
+#foreach my $service (qw(acon atd cups-lpd hpoj ibod iptables isdn4linux isdnlog jserver ntpd oki4daemon shorewall tmdns)) {
+# run_program::rooted($::prefix, '/sbin/chkconfig', '--level', $_, $service, 'off') foreach qw(3 5);
+#}
+
+# probably useless:
+foreach my $service (qw(alsa dm harddrake hotplug sound)) {
+ run_program::rooted($::prefix, '/sbin/chkconfig', '--level', $_, $service, 'on') foreach qw(3 5);
+}
+
+if ($options{post}) {
+ #-------------------------------------------------------------------
+ # save a few more files in profiles
+ my $prof_cfg = "$::prefix/etc/netprofile/list";
+ my @files = map { chomp_($_) } cat_($prof_cfg);
+ # do not save the whole /etc/sysconfig;
+ push @files, (map { "/etc/X11/$_" } qw(XF86Config XF86Config-4)),
+ (map { "/etc/sysconfig/$_" } qw(keyboard harddrake2/previous_hw harddisks)),
+ (map { "/etc/$_" } qw(modprobe.conf modprobe.devfs modprobe.preload modules modules.conf modules.devfs)),
+ qw(/etc/asound.state /etc/fstab /etc/ld.so.conf/GL.conf);
+
+ output($prof_cfg, join("\n", sort @files));
+
+
+ #-------------------------------------------------------------------
+ #- regenerate library loader and fonts cache
+ run_program::rooted($::prefix, 'ldconfig');
+ any::fix_broken_alternatives();
+ run_program::rooted($::prefix, 'fc-cache'); #- generate cache in all directories mentioned in config file
+
+ #- XFree
+
+ touch("$::prefix/etc/menu/enable_simplified");
+
+ {
+ local $ENV{LC_ALL} = 'en_US'; #- update-menus doesn't work when there is no locale (aka locale "C")
+ #local $ENV{HOME} = '/'; #- savekdemimetypes.pl needs this otherwise it's tmp file fails
+ run_program::rooted($::prefix, 'update-menus', '-n');
+ }
+
+ run_program::rooted($::prefix, 'nspluginscan'); #- must be run before kbuildsycoca for the ksycoca to be flash plugin aware
+
+ $ENV{HELP_BROWSER} = "kfmclient openProfile webbrowsing";
+ $ENV{BROWSER} = "kfmclient openProfile webbrowsing";
+ $ENV{DESKTOP} = "kde";
+ #- faster boot:
+ foreach my $lang (lang::list_langs()) {
+ local $ENV{LC_ALL} = lang::getLANGUAGE($lang);
+ unlink "$::prefix/usr/share/services/ksycoca";
+ run_program::rooted($::prefix, 'kbuildsycoca', '--global');
+ rename("$::prefix/usr/share/services/ksycoca", "$::prefix/usr/share/services/ksycoca-$lang");
+ }
+ symlinkf('/etc/X11/ksycoca', "$::prefix/usr/share/services/ksycoca");
+}
+
+# clean gconftool-2 mess:
+unlink $_ foreach glob("$::prefix/core.*");
+
+
+##- Mandrake
+#substInFile {
+# s!Mandrake(l| L)inux release (\S+) \(.*\)!Mandrakelinux Nomad, powered by LaCie Mobile Hard Drive)!;
+#} "$::prefix/etc/mandrake-release";
+#
+
+
+system("rsync -rvltp /export/ $::prefix/mnt/packages/");
+unlink $_ foreach glob("$::prefix/var/lib/urpmi/*");
+run_program::rooted($::prefix, 'urpmi.addmedia', '-h', 'main', 'file:///mnt/packages/Mandrake/RPMS');
+run_program::rooted($::prefix, 'urpmi.addmedia', '-h', 'contrib', 'file:///mnt/packages/Mandrake/RPMS2');
+
+# for fast test replaying:
+run_program::rooted($::prefix, 'tar', 'cfj', '/root/etc.tar.bz2', '/etc');
+
+fs::umount_all($fstab, $::prefix);
diff --git a/globetrotter/mandrake-globetrotter.spec b/globetrotter/mandrake-globetrotter.spec
new file mode 100644
index 000000000..4bb3a8ac9
--- /dev/null
+++ b/globetrotter/mandrake-globetrotter.spec
@@ -0,0 +1,45 @@
+Summary: Mandrakelinux Globetrotter tools
+Name: mandrake-globetrotter
+Version: 10
+Release: 1mdk
+Url: http://www.mandrakelinux.com/en/drakx.php3
+Source0: %name-%version.tar.bz2
+License: GPL
+Group: System/Configuration/Other
+Requires: drakxtools netprofile
+BuildRoot: %_tmppath/%name-buildroot
+
+
+%description
+Contains many Mandrakelinux tools needed for Mandrakelinux Globetrotter.
+
+%prep
+%setup -q
+
+%build
+%make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+mkdir -p $RPM_BUILD_ROOT/{%_initrddir,%_datadir/harddrake}
+%makeinstall_std PREFIX=$RPM_BUILD_ROOT
+install -m 755 hwprofile $RPM_BUILD_ROOT/%_datadir/harddrake/hwprofile
+
+%find_lang libDrakX2
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files -f libDrakX2.lang
+%defattr(-,root,root)
+%_datadir/harddrake/*
+%_sbindir/*
+/usr/lib/libDrakX/*pm
+/usr/share/libDrakX/pixmaps/lang*
+
+%changelog
+* Wed Apr 28 2004 Thierry Vignaud <tvignaud@mandrakesoft.com> 10-1mdk
+- initial release
diff --git a/globetrotter/move.pm b/globetrotter/move.pm
new file mode 100644
index 000000000..c61f3649b
--- /dev/null
+++ b/globetrotter/move.pm
@@ -0,0 +1,171 @@
+package move; # $Id$
+
+#- Copyright (c) 2004 MandrakeSoft
+#-
+#- This program is free software; you can redistribute it and/or modify
+#- it under the terms of the GNU General Public License as published by
+#- the Free Software Foundation; either version 2, or (at your option)
+#- any later version.
+#-
+#- This program is distributed in the hope that it will be useful,
+#- but WITHOUT ANY WARRANTY; without even the implied warranty of
+#- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+#- GNU General Public License for more details.
+#-
+#- 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+use diagnostics;
+use strict;
+
+use c;
+use common;
+use modules;
+use fs;
+use fsedit;
+use run_program;
+use partition_table qw(:types);
+use swap;
+use log;
+use lang;
+use detect_devices;
+
+sub symlinkf_short {
+ my ($dest, $file) = @_;
+ if (my $l = readlink $dest) {
+ $dest = $l if $l =~ m!^/!;
+ }
+ -d $file and log::l("$file already exists and is a directory! writing in directory may be needed, not overwriting"), return;
+ symlinkf($dest, $file);
+}
+
+#- run very soon at stage2 start, setup things on tmpfs rw / that
+#- were not necessary to start stage2 itself (there were setup
+#- by stage1 of course)
+sub init {
+ my ($o) = @_;
+
+ check_for_xserver() and c::bind_textdomain_codeset('libDrakX2', 'UTF8');
+
+
+ -d '/lib/modules/' . c::kernel_version() or warn("ERROR: kernel package " . c::kernel_version() . " not installed\n"), c::_exit(1);
+
+ run_program::run('sysctl', '-w', 'kernel.hotplug=/bin/true');
+ modules::load_category('bus/usb');
+ *c::pcmcia_probe = \&detect_devices::pcmcia_probe;
+ $o->{pcmcia} ||= !$::noauto && c::pcmcia_probe();
+ install_steps::setupSCSI($o);
+ run_program::run('sysctl', '-w', 'kernel.hotplug=/sbin/hotplug');
+
+drakx_stuff:
+ $o->{steps}{$_} = { reachable => 1, text => $_ }
+ foreach qw(autoSelectLanguage configMove selectMouse setRootPassword addUser configureNetwork miscellaneous selectMouse);
+ $o->{orderedSteps_orig} = $o->{orderedSteps};
+ $o->{orderedSteps} = [ qw(selectLanguage acceptLicense selectMouse setupSCSI miscellaneous selectKeyboard setRootPassword addUser configureNetwork configMove ) ];
+ $o->{steps}{first} = $o->{orderedSteps}[0];
+}
+
+
+
+
+sub enable_service {
+ run_program::run('/sbin/chkconfig', '--level', 5, $_[0], 'on');
+}
+
+sub disable_service {
+ run_program::run('/sbin/chkconfig', '--del', $_[0], 'on');
+}
+
+sub install2::configMove {
+ my $o = $::o;
+
+ security::level::set($o->{security});
+
+ require install_steps;
+ install_steps::addUser($o); # for test, when replaying wizard on an already configured machine
+ while ($#{$o->{users}} ne -1) {
+ install_steps::addUser($o);
+ }
+
+ $::noauto and goto after_autoconf;
+
+ my $_wait = $o->wait_message(N("Auto configuration"), N("Please wait, detecting and configuring devices..."));
+
+ #- automatic printer, timezone, network configs
+ require install_steps_interactive;
+ if (cat_('/proc/mounts') !~ /nfs/) {
+ install_steps_interactive::configureNetwork($o);
+ enable_service('network');
+ }
+ enable_service('netfs');
+ install_steps_interactive::summaryBefore($o);
+
+ modules::load_category('multimedia/sound');
+ enable_service('sound');
+
+ detect_devices::isLaptop() or enable_service('numlock');
+
+after_autoconf:
+ require timezone;
+ timezone::write($o->{timezone});
+
+ $o->{useSupermount} = 1;
+ fs::set_removable_mntpoints($o->{all_hds});
+ fs::set_all_default_options($o->{all_hds}, %$o, lang::fs_options($o->{locale}));
+
+ modules::write_conf();
+ require mouse;
+ mouse::write_conf($o, $o->{mouse}, 1); #- write xfree mouse conf
+ detect_devices::install_addons('');
+
+ foreach my $step (@{$o->{orderedSteps_orig}}) {
+ next if member($step, @{$o->{orderedSteps}});
+ while (my $f = shift @{$o->{steps}{$step}{toBeDone} || []}) {
+ log::l("doing remaining toBeDone for undone step $step");
+ eval { &$f() };
+ $o->ask_warn(N("Error"), [
+N("An error occurred, but I don't know how to handle it nicely.
+Continue at your own risk."), formatError($@) ]) if $@;
+ }
+ }
+ system("killall XFree86");
+ output_p("$::prefix/etc/rpm/macros", "%_install_langs all\n");
+ system("service dm on");
+ c::_exit(0);
+}
+
+
+
+sub automatic_xconf {
+ my ($o) = @_;
+
+ log::l('automatic XFree configuration');
+
+ any::devfssymlinkf($o->{mouse}, 'mouse');
+ local $o->{mouse}{device} = 'mouse';
+
+ require Xconfig::default;
+ $o->{raw_X} = Xconfig::default::configure({ KEYBOARD => 'uk' }, $o->{mouse}); #- using uk instead of us for now to have less warnings
+
+ require Xconfig::main;
+ require class_discard;
+ Xconfig::main::configure_everything_auto_install($o->{raw_X}, class_discard->new, {},
+ { allowNVIDIA_rpms => sub { [] }, allowATI_rpms => sub { [] }, allowFB => $o->{allowFB} });
+
+ modules::load_category('various/agpgart');
+
+ my $file = '/etc/X11/XF86Config';
+ $file = "$file-4" if -e "$file-4";
+ my ($Driver) = cat_($file) =~ /Section "Device".*Driver\s*"(.*?)"/s;
+ if ($Driver eq 'nvidia') {
+ modules::load('nvidia');
+ }
+ my $lib = 'libGL.so.1';
+ symlinkf_short(-e "/usr/lib/$lib.$Driver" ? "/usr/lib/$lib.$Driver" : "/usr/X11R6/lib/$lib", "/etc/X11/$lib");
+}
+
+sub handleI18NClp {}
+
+
+1;
diff --git a/globetrotter/runstage2 b/globetrotter/runstage2
new file mode 100755
index 000000000..bf88e886a
--- /dev/null
+++ b/globetrotter/runstage2
@@ -0,0 +1,30 @@
+#!/usr/bin/perl
+
+#- Copyright (c) 2004 MandrakeSoft
+#-
+#- This program is free software; you can redistribute it and/or modify
+#- it under the terms of the GNU General Public License as published by
+#- the Free Software Foundation; either version 2, or (at your option)
+#- any later version.
+#-
+#- This program is distributed in the hope that it will be useful,
+#- but WITHOUT ANY WARRANTY; without even the implied warranty of
+#- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+#- GNU General Public License for more details.
+#-
+#- 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# i18n: IMPORTANT: to get correct namespace (drakconf instead of libDrakX)
+BEGIN { unshift @::textdomains, 'libDrakX2' }
+c::bind_textdomain_codeset($_, 'UTF8') foreach 'libDrakX', @::textdomains;
+
+use lib qw(../perl-install /usr/lib/libDrakX);
+use standalone;
+use install2;
+
+#$::isStandalone = 0;
+install2::main(@ARGV, '--globetrotter');
+
+c::_exit(0);