275 lines
7.3 KiB
275 lines
7.3 KiB
# --- SDE-COPYRIGHT-NOTE-BEGIN --- |
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. |
|
# |
|
# Filename: package/.../stone/stone_mod_install.sh |
|
# Copyright (C) 2007 The OpenSDE Project |
|
# Copyright (C) 2004 - 2006 The T2 SDE Project |
|
# Copyright (C) 1998 - 2003 Clifford Wolf |
|
# |
|
# More information can be found in the files COPYING and README. |
|
# |
|
# 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; version 2 of the License. A copy of the |
|
# GNU General Public License can be found in the file COPYING. |
|
# --- SDE-COPYRIGHT-NOTE-END --- |
|
|
|
part_mounted_action() { |
|
if gui_yesno "Do you want to un-mount the filesystem on $1?" |
|
then umount /dev/$1; fi |
|
} |
|
|
|
part_swap_action() { |
|
if gui_yesno "Do you want to de-activate the swap space on $1?" |
|
then swapoff /dev/$1; fi |
|
} |
|
|
|
part_mount() { |
|
local dir |
|
gui_input "Mount device $1 on directory |
|
(for example /, /home, /var, ...)" '/' dir |
|
if [ "$dir" ] ; then |
|
dir="$( echo $dir | sed 's,^/*,,; s,/*$,,' )" |
|
if [ -z "$dir" ] || grep -q " /mnt/target " /proc/mounts |
|
then |
|
mkdir -p /mnt/target/$dir |
|
mount /dev/$1 /mnt/target/$dir |
|
else |
|
gui_message "Please mount a root filesystem first." |
|
fi |
|
fi |
|
} |
|
|
|
part_mkfs() { |
|
dev=$1 |
|
cmd="gui_menu part_mkfs 'Create filesystem on $dev'" |
|
|
|
maybe_add () { |
|
if grep -q $1 /proc/filesystems && type -p $3 > /dev/null ; then |
|
cmd="$cmd '$1 ($2 filesystem)' '$3 $4 /dev/$dev'" |
|
fi |
|
} |
|
|
|
maybe_add ext3 'journaling' 'mkfs.ext2' '-j' |
|
maybe_add ext2 'non-journaling' 'mkfs.ext2' |
|
maybe_add reiserfs 'journaling' 'mkfs.reiserfs' |
|
maybe_add reiser4 'high-performance journaling' 'mkfs.reiser4' |
|
maybe_add jfs 'IBM journaling' 'mkfs.jfs' |
|
maybe_add xfs 'Sgi journaling' 'mkfs.xfs' '-f' |
|
|
|
eval "$cmd" && part_mount $dev |
|
} |
|
|
|
part_unmounted_action() { |
|
gui_menu part "$1" \ |
|
"Mount an existing filesystem from the partition" \ |
|
"part_mount $1" \ |
|
"Create a filesystem on the partition" \ |
|
"part_mkfs $1" \ |
|
"Activate an existing swap space on the partition" \ |
|
"swapon /dev/$1" \ |
|
"Create a swap space on the partition" \ |
|
"mkswap /dev/$1; swapon /dev/$1" |
|
} |
|
|
|
part_add() { |
|
local action="unmounted" location="currently not mounted" |
|
if grep -q "^/dev/$1 " /proc/swaps; then |
|
action=swap ; location="swap <no mount point>" |
|
elif grep -q "^/dev/$1 " /proc/mounts; then |
|
action=mounted |
|
location="`grep "^/dev/$1 " /proc/mounts | cut -d ' ' -f 2 | |
|
sed "s,^/mnt/target,," `" |
|
[ "$location" ] || location="/" |
|
fi |
|
|
|
# save partition information |
|
disktype /dev/$1 > /tmp/stone-install |
|
type="`grep /tmp/stone-install -v -e '^ ' -e '^Block device' \ |
|
-e '^Partition' -e '^---' | \ |
|
sed -e 's/[,(].*//' -e '/^$/d' -e 's/ $//' | tail -n 1`" |
|
size="`grep 'Block device, size' /tmp/stone-install | \ |
|
sed 's/.* size \(.*\) (.*/\1/'`" |
|
|
|
[ "$type" ] || type="undetected" |
|
cmd="$cmd '`printf "%-6s %-24s %-10s" ${1#*/} "$location" "$size"` $type' 'part_${action}_action $1 $2'" |
|
} |
|
|
|
disk_action() { |
|
if grep -q "^/dev/$1 " /proc/swaps /proc/mounts; then |
|
gui_message "Partitions from $1 are currently in use, so you |
|
can't modify this disks partition table." |
|
return |
|
fi |
|
|
|
cmd="gui_menu disk 'Edit partition table of $1'" |
|
for x in parted cfdisk fdisk pdisk mac-fdisk ; do |
|
type -p $x > /dev/null && |
|
cmd="$cmd \"Edit partition table using '$x'\" \"$x /dev/$1\"" |
|
done |
|
|
|
eval $cmd |
|
} |
|
|
|
vg_action() { |
|
cmd="gui_menu vg 'Volume Group $1'" |
|
|
|
if [ -d /dev/$1 ]; then |
|
cmd="$cmd 'Display attributes of $1' 'gui_cmd \"display $1\" vgdisplay $1'" |
|
|
|
if grep -q "^/dev/$1/" /proc/swaps /proc/mounts; then |
|
cmd="$cmd \"LVs of $1 are currently in use, so you can't |
|
de-activate it.\" ''" |
|
else |
|
cmd="$cmd \"De-activate VG '$1'\" 'vgchange -an $1'" |
|
fi |
|
else |
|
cmd="$cmd 'Display attributes of $1' 'gui_cmd \"display $1\" vgdisplay -D $1'" |
|
|
|
cmd="$cmd \"Activate VG '$1'\" 'vgchange -ay $1'" |
|
fi |
|
|
|
eval $cmd |
|
} |
|
|
|
disk_add() { |
|
local x y=0 |
|
cmd="$cmd 'Edit partition table of $1:' 'disk_action $1'" |
|
for x in $( cd /dev/ ; ls $1$2[0-9]* 2> /dev/null ) |
|
do |
|
part_add $x ; y=1 |
|
done |
|
[ $y = 0 ] && cmd="$cmd 'Partition table is empty.' ''" |
|
cmd="$cmd '' ''" |
|
} |
|
|
|
vg_add() { |
|
local x= y=0 |
|
cmd="$cmd 'Logical volumes of $1:' 'vg_action $1'" |
|
if [ -d /dev/$1 ] ; then |
|
for x in $( cd /dev/ ; ls -1 $1/* ); do |
|
part_add $x ; y=1 |
|
done |
|
if [ $y = 0 ]; then |
|
cmd="$cmd 'No logical volumes.' ''" |
|
fi |
|
else |
|
cmd="$cmd 'Volume Group is not active.' ''" |
|
fi |
|
cmd="$cmd '' ''" |
|
} |
|
|
|
main() { |
|
$STONE general set_keymap |
|
|
|
local cmd install_now=0 |
|
while |
|
cmd="gui_menu install 'Disc setup (partitions and mount-points) |
|
|
|
This dialog allows you to modify your discs parition layout and to create filesystems and swap-space - as well as mouting / activating it. Everything you can do using this tool can also be done manually on the command line.'" |
|
|
|
# protect for the case no discs are present ... |
|
found=0 |
|
for x in $( cd /dev/; ls hd[a-z] sd[a-z] 2> /dev/null ); do |
|
grep -q cdrom /proc/ide/$x/media 2>/dev/null && continue |
|
disk_add $x |
|
found=1 |
|
done |
|
# |
|
# Check for Special Drive Array Controllers |
|
# |
|
# Mylex DAC960/AcceleRAID/eXtremeRAID PCI RAID Controllers |
|
# Driver: DAC960 |
|
# up to 8 controllers, 32 logical drives, 7 partitions |
|
# Device: /dev/rd/c<controller>d<logical drive>p<partition> |
|
# |
|
# Compaq Intelligent Drive Array |
|
# Driver: cpqarray |
|
# up to 8 controllers, 16 logical drives, 15 partitions |
|
# Device: /dev/ida/c<controller>d<logical drive>p<partition> |
|
# |
|
# Compaq Next Generation Drive Array |
|
# Driver: cciss |
|
# up to 8 controllers, 16 logical drives, 15 partitions |
|
# Device: /dev/cciss/c<controller>d<logical drive>p<partition> |
|
# |
|
|
|
# cmax = maximum number of controllers - 1 |
|
# dmax = maximum number of logical drives - 1 |
|
for x in rd cpqarray cciss ; do |
|
if [ -d /dev/$x ] ; then |
|
case $x in |
|
rd) |
|
cmax=7 |
|
dmax=31 |
|
;; |
|
cpqarray|cciss) |
|
cmax=7 |
|
dmax=15 |
|
;; |
|
esac |
|
|
|
for c in $( seq 0 $cmax ); do |
|
for d in $( seq 0 $dmax ); do |
|
if [ -b /dev/$x/c${c}d${d} ] ; then |
|
disk_add $x/c${c}d${d} p |
|
found=1 |
|
fi |
|
done |
|
done |
|
fi |
|
done |
|
|
|
|
|
for x in $( cat /etc/lvmtab 2> /dev/null ); do |
|
vg_add "$x" |
|
found=1 |
|
done |
|
[ -x /sbin/vgs ] && for x in $( vgs --noheadings -o name 2> /dev/null ); do |
|
vg_add "$x" |
|
found=1 |
|
done |
|
if [ $found = 0 ]; then |
|
cmd="$cmd 'No hard-disc found!' ''" |
|
fi |
|
|
|
cmd="$cmd 'Install the system ...' 'install_now=1'" |
|
|
|
eval "$cmd" && [ "$install_now" -eq 0 ] |
|
do : ; done |
|
|
|
if [ "$install_now" -ne 0 ] ; then |
|
$STONE packages |
|
mount -v /dev /mnt/target/dev --bind |
|
cat > /mnt/target/tmp/stone_postinst.sh << EOT |
|
#!/bin/sh |
|
mount -v /proc |
|
mount -v /sys |
|
. /etc/profile |
|
stone setup |
|
umount -v /dev |
|
umount -v /proc |
|
umount -v /sys |
|
EOT |
|
chmod +x /mnt/target/tmp/stone_postinst.sh |
|
grep ' /mnt/target[/ ]' /proc/mounts | \ |
|
sed 's,/mnt/target/\?,/,' > /mnt/target/etc/mtab |
|
cd /mnt/target ; chroot . ./tmp/stone_postinst.sh |
|
rm -fv ./tmp/stone_postinst.sh |
|
if gui_yesno "Do you want to un-mount the filesystems and reboot now?" |
|
then |
|
shutdown -r now |
|
else |
|
echo |
|
echo "You might want to umount all filesystems now and reboot" |
|
echo "the system now using the commands:" |
|
echo |
|
echo " umount -arv" |
|
echo " reboot -f" |
|
echo |
|
echo "Or by executing 'shutdown -r now' which will run the above commands." |
|
echo |
|
fi |
|
fi |
|
} |
|
|
|
|