summaryrefslogtreecommitdiff
path: root/src/core/procedures/automatic
blob: ba533fa776175c6dedc63e95817c87275e17b94b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/bin/bash
# This is a procedure for automatic deployment/installation/configuration of systems.
# check /usr/share/aif/examples for some example config files.
# This procedure can easily replace the old quickinst script if you look at the "generic install" config file
# Look at the base procedure to see the phases and which workers they'll execute.
# It should be:
# phase_preparation=(configure intro sysprep select_source runtime_network runtime_repositories runtime_packages)
# phase_basics=(set_clock prepare_disks)
# phase_system=(package_list install_packages configure_system install_bootloader)
# phase_finish=(msg_report)

# In theory, the only manual thing should maybe be configuring the runtime network and putting the configfile in place
# I don't know if you can do non-interactive dm_crypt stuff.. maybe by pulling luks keyfiles from svn/git/..?
# TODO: implement setting hostname, keymap, consolefont, network settings, root pass, etc
# for a list of recognized variables, see examples/generic-install-on-sda

depend_procedure core base # important, don't be confused when worker/variable definitions seem to be missing here.

var_OPTS_STRING="c:"
var_ARGS_USAGE="-c <config>: Specify a configfile (profile) to be used"
var_AUTOMATIC_PROFILE=""
# TODO: if the user does aif -p automatic -c, then $1 is ":-" ??? if you do -c <something> then it's ok.
process_args ()
{
	if [ "$1" = '-c' ]
	then
		[ -z "$2" ] && die_error "You must specify a config"
		var_AUTOMATIC_PROFILE=$2
	else
		usage
		exit 5
        fi
}


worker_intro ()
{
	notify "Automatic procedure running profile $var_AUTOMATIC_PROFILE ...\n$DISCLAIMER"
}


worker_configure ()
{
	var_UI_TYPE=${arg_ui_type:-cli}
	ui_init
	[ -z "$var_AUTOMATIC_PROFILE" ] && die_error "You must specify a config file to use this procedure"
	source $var_AUTOMATIC_PROFILE   || die_error "Could not source config $var_AUTOMATIC_PROFILE"
	# Check mandatory options
	[ -z "$PARTITIONS" ] && die_error "You did not specify a partition scheme"
	[ -z "$BLOCKDATA"  ] && die_error "You did not specify a partition scheme"
	[ -z "$GRUB_DEVICE" ] && die_error "You did not specify a grub device"
	# initialize internal variables based on variables set by the user (some of the vars are handled in other workers):
	var_RUNTIME_REPOSITORIES=$RUNTIME_REPOSITORIES
	var_RUNTIME_PACKAGES=$RUNTIME_PACKAGES
	var_GRUB_DEVICE=$GRUB_DEVICE
	var_PARTITIONS=$PARTITIONS
	var_BLOCKDATA=$BLOCKDATA
	HARDWARECLOCK=${HARDWARECLOCK:-localtime}
	TIMEZONE=${TIMEZONE:-Canada/Pacific}
}

worker_select_source ()
{
        var_PKG_SOURCE_TYPE=${SOURCE:-cd}
        var_FILE_URL=${FILE_URL:-file:///src/core/pkg}
        var_SYNC_URL=${SYNC_URL:-}
}

worker_prepare_disks ()
{
	get_possible_fs
	echo "$var_PARTITIONS" > $TMP_PARTITIONS
	echo "$var_BLOCKDATA" > $TMP_BLOCKDEVICES
	process_disks       || die_error "Could not process_disks"
	if ! process_filesystems
	then
		show_warning 'Disk processing' "Could not process_filesystems"
		txt='also failed to execute properly'
		rollback_filesystems && txt='ended successfully'
		die_error "Something failed while processing the filesystem.  A rollback was executed, which $txt"
	fi
	inform "Partitions and filesystems made successfully"

	# TODO: fstab? auto-add to fstab with libs? auto mkdir's on target_dir?
	true	
}

worker_package_list ()
{
	var_TARGET_PACKAGES=$TARGET_PACKAGES
	var_TARGET_GROUPS=$TARGET_GROUPS
	var_TARGET_PACKAGES_EXCLUDE=$TARGET_PACKAGES_EXCLUDE
	[ -z "$var_TARGET_PACKAGES" -a -z "$var_TARGET_GROUPS" ] && var_TARGET_GROUPS=base
}


worker_install_packages ()
{
        target_prepare_pacman core extra community
        installpkg
}


worker_set_clock ()
{
	#TODO implement this
	true
}


worker_install_bootloader ()
{
    get_grub_map
	grub-install $var_GRUB_DEVICE --root-directory=/mnt
    # check if we have a seperate bootdev (/boot)
    # ToDo: This is double-work, find a better place!
    # See comment in generate_grub_menulst and interactive_grub
    bootdev=$(mount | grep $var_TARGET_DIR/boot | cut -d' ' -f 1)
	generate_grub_menulst
}