From b5dc638815c772056e07cd013f5b1674900456d5 Mon Sep 17 00:00:00 2001 From: Thierry Vignaud Date: Tue, 15 Jun 2004 16:50:22 +0000 Subject: Initial revision --- globetrotter/.perl_checker | 4 + globetrotter/Makefile | 91 +++++++ globetrotter/README | 65 +++++ globetrotter/doc/BUGS | 6 + globetrotter/doc/BUILD | 24 ++ globetrotter/doc/NOTES | 17 ++ globetrotter/hwprofile | 47 ++++ globetrotter/make_live | 410 ++++++++++++++++++++++++++++++++ globetrotter/mandrake-globetrotter.spec | 45 ++++ globetrotter/move.pm | 171 +++++++++++++ globetrotter/runstage2 | 30 +++ 11 files changed, 910 insertions(+) create mode 100644 globetrotter/.perl_checker create mode 100644 globetrotter/Makefile create mode 100644 globetrotter/README create mode 100644 globetrotter/doc/BUGS create mode 100644 globetrotter/doc/BUILD create mode 100644 globetrotter/doc/NOTES create mode 100644 globetrotter/hwprofile create mode 100755 globetrotter/make_live create mode 100644 globetrotter/mandrake-globetrotter.spec create mode 100644 globetrotter/move.pm create mode 100755 globetrotter/runstage2 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 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); -- cgit v1.2.1