summaryrefslogtreecommitdiff
path: root/src/core/procedures/automatic
blob: 5f6f33637c2a46e840262be8f76ee4b5715db932 (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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#!/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 auto_network auto_locale auto_keymap_font configure_system mkinitcpio locales 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

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_runtime_network ()
{
	true # for now. we assume the user has taken care of this himself already. doing this interactively wouldn't be a good default anyway.
	# maybe check if network works, if not, try dhcp. let user override by using a static config in his config file
	#if ask_yesno "Do you want to (re)-configure your networking?"
	#then
	#	interactive_runtime_network
	#else
	#	inform "Ok. skipping network config"
	#fi
}


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_auto_network () {
	#TODO implement this
	true
}


worker_configure_system () {
	prefill_configs
}

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
}