index
:
drakx
distro/mdv2007.1
distro/mdv2008.0
distro/mdv2008.1
distro/mdv2009.0
distro/mdv2009.1
distro/mdv2010.0
distro/mes5
distro/mes5-2.6.33
distro/mes6
distro/mga1
distro/mga2
distro/mga3
distro/mga4
distro/mga5
distro/mga6
distro/mga7
distro/mga8
distro/mga9
master
topic/Corpo_2_1
topic/KA9_0
topic/MDK-10-update
topic/MDK-10_1-update
topic/MDK-10_2-update
topic/MDK-2006_0-update
topic/MDK92-branch
topic/MDKC_1_0
topic/PCMCIA_CS_DISTRO
topic/R9_0-64bit-branch
topic/R9_1_HP-branch
topic/a
topic/before_matchbox_wm
topic/bug-13680
topic/dietlibc
topic/efi
topic/extlinux
topic/firewall
topic/gdk-pixbuf-0-branch
topic/gi-ppc
topic/ia64-8_1
topic/mandrakesoft
topic/mlcd4
topic/ppp
topic/rp-pppoe
topic/switching_to_dnf
topic/switching_to_urpmi
topic/unlabeled-1.1.1
topic/v_webmin_0_87
topic/x86_64-branch
user/animtim/designWork
user/colin/rescue-systemd
user/ennael/mga6
user/erwan/bug-13680
user/jibz/aarch64
user/martinw/mga6
user/pterjan/arm64
Mageia Installer and base platform for many utilities
Thierry Vignaud [tv]
summary
refs
log
tree
commit
diff
stats
log msg
author
committer
range
path:
root
/
perl-install
/
share
/
advertising
Mode
Name
Size
-rw-r--r--
01-thanks.pl
503
log
stats
plain
-rw-r--r--
01-thanks.png
66106
log
stats
plain
-rw-r--r--
02-community.pl
463
log
stats
plain
-rw-r--r--
02-community.png
19974
log
stats
plain
-rw-r--r--
03-internet.pl
439
log
stats
plain
-rw-r--r--
03-internet.png
114265
log
stats
plain
-rw-r--r--
04-multimedia.pl
469
log
stats
plain
-rw-r--r--
04-multimedia.png
104416
log
stats
plain
-rw-r--r--
05-games.pl
300
log
stats
plain
-rw-r--r--
05-games.png
125923
log
stats
plain
-rw-r--r--
06-mcc.pl
322
log
stats
plain
-rw-r--r--
06-mcc.png
52917
log
stats
plain
-rw-r--r--
07-desktop.pl
339
log
stats
plain
-rw-r--r--
07-desktop.png
81578
log
stats
plain
-rw-r--r--
08-development.pl
416
log
stats
plain
-rw-r--r--
08-development.png
80198
log
stats
plain
-rw-r--r--
09-server.pl
398
log
stats
plain
-rw-r--r--
09-server.png
52998
log
stats
plain
-rw-r--r--
10-mnf.pl
528
log
stats
plain
-rw-r--r--
10-mnf.png
68137
log
stats
plain
-rw-r--r--
11-mdkstore.pl
371
log
stats
plain
-rw-r--r--
11-mdkstore.png
56540
log
stats
plain
-rw-r--r--
12-mdkstore.pl
463
log
stats
plain
-rw-r--r--
12-mdkstore.png
54519
log
stats
plain
-rw-r--r--
13-mdkcampus.pl
704
log
stats
plain
-rw-r--r--
13-mdkcampus.png
34666
log
stats
plain
-rw-r--r--
14-mdkexpert.pl
521
log
stats
plain
-rw-r--r--
14-mdkexpert.png
49069
log
stats
plain
-rw-r--r--
15-mdkexpert-corporate.pl
473
log
stats
plain
-rw-r--r--
15-mdkexpert-corporate.png
34666
log
stats
plain
-rw-r--r--
16-thanks.png
66106
log
stats
plain
-rwxr-xr-x
17-mdkclub.pl
759
log
stats
plain
-rw-r--r--
17-mdkclub.png
34666
log
stats
plain
-rw-r--r--
Makefile
316
log
stats
plain
-rw-r--r--
list
270
log
stats
plain
>
,
1
,
''
],
selectInstallClass
=> [
__
(
"Select installation class"
),
1
,
1
,
''
],
setupSCSI
=> [
__
(
"Hard drive detection"
),
1
,
0
,
''
],
selectMouse
=> [
__
(
"Configure mouse"
),
1
,
1
,
''
,
"selectInstallClass"
],
selectKeyboard
=> [
__
(
"Choose your keyboard"
),
1
,
1
,
''
,
"selectInstallClass"
],
#- miscellaneous => [ __("Miscellaneous"), 1, 1, '!$::expert' ],
doPartitionDisks
=> [
__
(
"Setup filesystems"
),
1
,
0
,
''
,
"selectInstallClass"
],
formatPartitions
=> [
__
(
"Format partitions"
),
1
, -
1
,
''
,
"doPartitionDisks"
],
choosePackages
=> [
__
(
"Choose packages to install"
),
1
, -
2
,
'!$::expert'
,
"formatPartitions"
],
installPackages
=> [
__
(
"Install system"
),
1
, -
1
,
''
, [
"formatPartitions"
,
"selectInstallClass"
] ],
configureNetwork
=> [
__
(
"Configure networking"
),
1
,
1
,
''
,
"formatPartitions"
],
#- installCrypto => [ __("Cryptographic"), 1, 1, '!$::expert', "configureNetwork" ],
summary
=> [
__
(
"Summary"
),
1
,
0
,
''
,
"installPackages"
],
configureServices
=> [
__
(
"Configure services"
),
1
,
1
,
'!$::expert'
,
"installPackages"
],
setRootPassword
=> [
__
(
"Set root password"
),
1
,
1
,
''
,
"installPackages"
],
addUser
=> [
__
(
"Add a user"
),
1
,
1
,
''
,
"installPackages"
],
arch
() !~
/alpha/
?
(
createBootdisk
=> [
__
(
"Create a bootdisk"
),
1
,
0
,
''
,
"installPackages"
],
) : (),
setupBootloader
=> [
__
(
"Install bootloader"
),
1
,
1
,
''
,
"installPackages"
],
configureX
=> [
__
(
"Configure X"
),
1
,
1
,
''
, [
"formatPartitions"
,
"setupBootloader"
] ],
exitInstall
=> [
__
(
"Exit install"
),
0
,
0
,
'!$::expert && !$::live'
],
);
for
(
my
$i
=
0
;
$i
<
@installSteps
;
$i
+=
2
) {
my
%h
;
@h
{
@installStepsFields
} = @{
$installSteps
[
$i
+
1
] };
$h
{
next
} =
$installSteps
[
$i
+
2
];
$h
{
entered
} =
0
;
$h
{
onError
} =
$installSteps
[
$i
+
2
*
$h
{
onError
}];
$h
{
reachable
} = !
$h
{
needs
};
$installSteps
{
$installSteps
[
$i
] } =
\
%h
;
push
@orderedInstallSteps, $installSteps
[
$i
];
}
$installSteps
{
first
} =
$installSteps
[
0
];
}
#-#####################################################################################
#-INTERNAL CONSTANT
#-#####################################################################################
my
@install_classes
=
qw(normal developer server)
;
#-#######################################################################################
#-$O
#-the big struct which contain, well everything (globals + the interactive methods ...)
#-if you want to do a kickstart file, you just have to add all the required fields (see for example
#-the variable $default)
#-#######################################################################################
$o
= $::
o
= {
# bootloader => { linear => 0, lba32 => 1, message => 1, timeout => 5, restricted => 0 },
autoSCSI
=>
0
,
mkbootdisk
=>
1
,
#- no mkbootdisk if 0 or undef, find a floppy with 1, or fd1
#- packages => [ qw() ],
partitioning
=> {
clearall
=>
0
,
eraseBadPartitions
=>
0
,
auto_allocate
=>
0
},
#-, readonly => 0 },
security
=>
2
,
authentication
=> {
md5
=>
1
,
shadow
=>
1
},
lang
=>
'en_US'
,
isUpgrade
=>
0
,
toRemove
=> [],
toSave
=> [],
#- simple_themes => 1,
timezone
=> {
#- timezone => "Europe/Paris",
#- UTC => 1,
},
#- superuser => { password => 'a', shell => '/bin/bash', realname => 'God' },
#- user => { name => 'foo', password => 'bar', home => '/home/foo', shell => '/bin/bash', realname => 'really, it is foo' },
#- keyboard => 'de',
#- display => "192.168.1.19:1",
steps
=>
\
%installSteps,
orderedSteps
=>
\
@orderedInstallSteps,
#- for the list of fields available for user and superuser, see @etc_pass_fields in install_steps.pm
#- intf => { eth0 => { DEVICE => "eth0", IPADDR => '1.2.3.4', NETMASK => '255.255.255.128' } },
#-step : the current one
#-prefix
#-mouse
#-keyboard
#-netc
#-autoSCSI drives hds fstab
#-methods
#-packages compss
#-printer haveone entry(cf printer.pm)
};
#-######################################################################################
#- Steps Functions
#- each step function are called with two arguments : clicked(because if you are a
#- beginner you can force the the step) and the entered number
#-######################################################################################
#------------------------------------------------------------------------------
sub
selectLanguage
{
$o
->
selectLanguage
(
$_
[
1
] ==
1
);
addToBeDone
{
lang
::
write_langs
(
$o
->{
prefix
},
$o
->{
langs
});
}
'formatPartitions'
unless
$::
g_auto_install
;
addToBeDone
{
lang
::
write
(
$o
->{
prefix
},
$o
->{
lang
});
keyboard
::
write
(
$o
->{
prefix
},
$o
->{
keyboard
},
lang
::
lang2charset
(
$o
->{
lang
}));
}
'installPackages'
unless
$::
g_auto_install
;
}
#------------------------------------------------------------------------------
sub
selectMouse
{
require
pkgs
;
my
(
$first_time
) =
$_
[
1
] ==
1
;
add2hash
(
$o
->{
mouse
} ||= {},
mouse
::
read
(
$o
->{
prefix
}))
if
$o
->{
isUpgrade
} &&
$first_time
;
$o
->
selectMouse
(!
$first_time
);
addToBeDone
{
mouse
::
write
(
$o
->{
prefix
},
$o
->{
mouse
}) }
'installPackages'
;
}
#------------------------------------------------------------------------------
sub
setupSCSI
{
my
(
$clicked
) =
@_
;
$o
->{
autoSCSI
} ||= !$::
expert
;
$o
->
setupSCSI
(
$o
->{
autoSCSI
} && !
$clicked, $clicked
);
}
#------------------------------------------------------------------------------
sub
selectKeyboard
{
my
(
$clicked, $first_time
) = (
$_
[
0
],
$_
[
1
] ==
1
);
if
(
$o
->{
isUpgrade
} &&
$first_time
&&
$o
->{
keyboard_unsafe
}) {
my
$keyboard
=
keyboard
::
read
(
$o
->{
prefix
});
$keyboard
and
$o
->{
keyboard
} =
$keyboard
;
}
return if
!$::
expert
&& !
$clicked
;
$o
->
selectKeyboard
(
$clicked
);
}
#------------------------------------------------------------------------------
sub
selectInstallClass
{
my
(
$clicked
) =
@_
;
$o
->
selectInstallClass
(
$clicked
);
if
(
$o
->{
steps
}{
choosePackages
}{
entered
} >=
1
&& !
$o
->{
steps
}{
installPackages
}{
done
}) {
$o
->
setPackages
(
\
@install_classes
);
$o
->
selectPackagesToUpgrade
if
$o
->{
isUpgrade
};
}
if
(
$o
->{
isUpgrade
}) {
@{
$o
->{
orderedSteps
}} =
map
{
/setupSCSI/
?
(
$_,
"doPartitionDisks"
) :
$_
}
grep
{ !
/doPartitionDisks/
} @{
$o
->{
orderedSteps
}};
my
$s
;
foreach
(@{
$o
->{
orderedSteps
}}) {
$s
->{
next
} =
$_
if
$s
;
$s
=
$o
->{
steps
}{
$_
};
}
}
}
#------------------------------------------------------------------------------
sub
doPartitionDisks
{
$o
->{
steps
}{
formatPartitions
}{
done
} =
0
;
$o
->
doPartitionDisksBefore
;
$o
->
doPartitionDisks
;
$o
->
doPartitionDisksAfter
;
}
sub
formatPartitions
{
$o
->{
steps
}{
choosePackages
}{
done
} =
0
;
$o
->
choosePartitionsToFormat
(
$o
->{
fstab
})
unless
$o
->{
isUpgrade
};
$o
->
formatMountPartitions
(
$o
->{
fstab
})
unless
$::
testing
;
mkdir
"
$o
->{prefix}/
$_
"
,
0755
foreach
qw(dev etc etc/profile.d etc/rpm etc/sysconfig etc/sysconfig/console
etc/sysconfig/network-scripts etc/sysconfig/console/consolefonts
etc/sysconfig/console/consoletrans
home mnt tmp var var/tmp var/lib var/lib/rpm var/lib/urpmi)
;
mkdir
"
$o
->{prefix}/
$_
"
,
0700
foreach
qw(root root/tmp)
;
any
::
rotate_logs
(
$o
->{
prefix
});
require
raid
;
raid
::
prepare_prefixed
(
$o
->{
raid
},
$o
->{
prefix
});
my
$d
=
"/initrd/loopfs/lnx4win"
;
if
(-
d
$d
) {
#- install_any::useMedium(0);
install_any
::
getAndSaveFile
(
"lnx4win/
$_
"
,
"
$d/$_
"
)
foreach
qw(ctl3d32.dll loadlin.exe linux.pif lnx4win.exe lnx4win.ico rm.exe uninstall.bat uninstall.pif)
;
}
#- chdir "$o->{prefix}"; was for core dumps
#-noatime option for ext2 fs on laptops (do not wake up the hd)
#- Do not update inode access times on this
#- file system (e.g, for faster access on the
#- news spool to speed up news servers).
$o
->{
pcmcia
}
and
$_
->{
options
} =
"noatime"
foreach
grep
{
isTrueFS
(
$_
) } @{
$o
->{
fstab
}};
}
#------------------------------------------------------------------------------
sub
choosePackages
{
require
pkgs
;
#- always setPackages as it may have to copy hdlist files and depslist file.
$o
->
setPackages
;
$o
->
choosePackages
(
$o
->{
packages
},
$o
->{
compss
},
$o
->{
compssUsers
},
$_
[
1
] ==
1
);
#- check pre-condition where base backage has to be selected.
pkgs
::
packageFlagSelected
(
pkgs
::
packageByName
(
$o
->{
packages
},
'basesystem'
))
or die
"basesystem package not selected"
;
#- check if there are package that need installation.
$o
->{
steps
}{
installPackages
}{
done
} =
0
if
$o
->{
steps
}{
installPackages
}{
done
} &&
pkgs
::
packagesToInstall
(
$o
->{
packages
}) >
0
;
}
#------------------------------------------------------------------------------
sub
installPackages
{
$o
->
readBootloaderConfigBeforeInstall
if
$_
[
1
] ==
1
;
$o
->
beforeInstallPackages
;
$o
->
installPackages
;
$o
->
afterInstallPackages
;
}
#------------------------------------------------------------------------------
sub
miscellaneous
{
$o
->
miscellaneousBefore
(
$_
[
0
]);
$o
->
miscellaneous
(
$_
[
0
]);
addToBeDone
{
setVarsInSh
(
"
$o
->{prefix}/etc/sysconfig/system"
, {
CLEAN_TMP
=>
$o
->{
miscellaneous
}{
CLEAN_TMP
},
CLASS
=> $::
expert
&&
'expert'
||
'beginner'
,
SECURITY
=>
$o
->{
security
},
META_CLASS
=>
$o
->{
meta_class
} ||
'PowerPack'
,
});
my
$f
=
"
$o
->{prefix}/etc/sysconfig/usb"
;
output
$f,
"USB=yes
MOUSE="
.
bool2yesno
(
detect_devices
::
usbMice
()) .
"
KEYBOARD="
.
bool2yesno
(
detect_devices
::
usbKeyboards
()) .
"
STORAGE="
.
bool2yesno
(
detect_devices
::
usbZips
()) .
"
VISOR=no
"
if
modules
::
get_alias
(
"usb-interface"
) && ! -
e
$f
;
install_any
::
fsck_option
(
$o
);
}
'installPackages'
;
}
#------------------------------------------------------------------------------
sub
summary
{
$o
->
summary
(
$_
[
1
] ==
1
) }
#------------------------------------------------------------------------------
sub
configureNetwork
{
#- get current configuration of network device.
require
network
;
eval
{
network
::
read_all_conf
(
$o
->{
prefix
},
$o
->{
netc
} ||= {},
$o
->{
intf
} ||= {}) };
$o
->
configureNetwork
(
$_
[
1
] ==
1
);
}
#------------------------------------------------------------------------------
sub
installCrypto
{
$o
->
installCrypto
}
#------------------------------------------------------------------------------
sub
configureServices
{
$o
->
configureServices
(
$_
[
0
]) }
#------------------------------------------------------------------------------
sub
setRootPassword
{
return if
$o
->{
isUpgrade
};
$o
->
setRootPassword
(
$_
[
0
]);
addToBeDone
{
install_any
::
setAuthentication
(
$o
) }
'installPackages'
;
}
#------------------------------------------------------------------------------
sub
addUser
{
return if
$o
->{
isUpgrade
} && !
$_
[
0
];
$o
->
addUser
(
$_
[
0
]);
}
#------------------------------------------------------------------------------
sub
createBootdisk
{
modules
::
write_conf
(
$o
->{
prefix
});
$o
->
createBootdisk
(
$_
[
1
] ==
1
);
}
#------------------------------------------------------------------------------
sub
setupBootloader
{
return if
$::
g_auto_install
;
modules
::
write_conf
(
$o
->{
prefix
});
$o
->
setupBootloaderBefore
if
$_
[
1
] ==
1
;
$o
->
setupBootloader
(
$_
[
1
] -
1
);
local
$ENV
{
DRAKX_PASSWORD
} =
$o
->{
bootloader
}{
password
};
run_program
::
rooted
(
$o
->{
prefix
},
"/usr/sbin/msec"
,
$o
->{
security
});
}
#------------------------------------------------------------------------------
sub
configureX
{
my
(
$clicked
) =
@_
;
#- done here and also at the end of install2.pm, just in case...
fs
::
write
(
$o
->{
prefix
},
$o
->{
fstab
},
$o
->{
manualFstab
},
$o
->{
useSupermount
});
modules
::
write_conf
(
$o
->{
prefix
});
require
pkgs
;
$o
->
configureX
(
$clicked
)
if
pkgs
::
packageFlagInstalled
(
pkgs
::
packageByName
(
$o
->{
packages
},
'XFree86'
)) && !
$o
->{
X
}{
disabled
} ||
$clicked
|| $::
testing
;
}
#------------------------------------------------------------------------------
sub
exitInstall
{
$o
->
exitInstall
(
getNextStep
()
eq
"exitInstall"
) }
#-######################################################################################
#- MAIN
#-######################################################################################
sub
main
{
$SIG
{
__DIE__
} =
sub
{
chomp
(
my
$err
=
$_
[
0
]);
log
::
l
(
"warning:
$err
"
) };
$SIG
{
SEGV
} =
sub
{
my
$msg
=
"segmentation fault: seems like memory is missing as the install crashes"
;
print
"
$msg\n
"
;
log
::
l
(
$msg
);
$o
->
ask_warn
(
''
,
$msg
);
setVirtual
(
1
);
require
install_steps_auto_install
;
install_steps_auto_install
::
errorInStep
();
};
$ENV
{
PERL_BADLANG
} =
1
;
$::
isInstall
=
1
;
$::
expert
= $::
g_auto_install
=
0
;
#- c::unlimit_core() unless $::testing;
my
(
$cfg, $patch, @auto
);
my
%cmdline
;
map
{
my
(
$n, $v
) =
split
'='
;
$cmdline
{
$n
} =
$v
||
1
;
}
split
' '
,
cat_
(
"/proc/cmdline"
);
my
$opt
;
foreach
(
@_
) {
if
(
/^--?(.*)/
) {
$cmdline
{
$opt
} =
1
if
$opt
;
$opt
=
$1
;
}
else
{
$cmdline
{
$opt
} =
$_
if
$opt
;
$opt
=
''
;
}
}
$cmdline
{
$opt
} =
1
if
$opt
;
map_each
{
my
(
$n, $v
) =
@_
;
my
$f
= ${{
oem
=>
sub
{ $::
oem
=
$v
},
lang
=>
sub
{
$o
->{
lang
} =
$v
},
flang
=>
sub
{
$o
->{
lang
} =
$v
;
push
@auto,
'selectLanguage'
},
method
=>
sub
{
$o
->{
method
} =
$v
},
pcmcia
=>
sub
{
$o
->{
pcmcia
} =
$v
},