summaryrefslogtreecommitdiff
path: root/src/core/procedures/automatic
blob: 0e47f7bb29ddf780cb51b6ea7076a2959c455127 (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
#!/bin/bash
# This procedure is EARLY in development!!
# This is a procedure for automatic deployment/installation/configuration of systems. # TODO: document! (readme, notes about deployment profiles, examples, ...)

# In theory, the only manual thing should maybe be configuring the runtime network
# TODO: implement profile reading
# TODO: I don't know if you can do non-interactive dm_crypt stuff.. maybe by pulling luks keyfiles from svn/git/..?

depend_module yaourt
depend_procedure core base

phase_preparation=(\
	configure \
	intro \
	sysprep \
	runtime_network \
	runtime_svn \
	msg_automatic \
	select_source \
	runtime_packages \
	runtime_yaourt)

phase_finish=(configure_home msg_report)


worker_intro ()
{
	notify "Automatic procedure running..."
}


worker_configure ()
{
	var_UI_TYPE=${arg_ui_type:-cli}
}


worker_msg_manual ()
{
	# All things that need to be done manually first
	notify "A few manual things need to happen first..."
}


worker_msg_automatic ()
{
	notify "**** From now on. everything will be automatic. Enjoy the show!" # not true: you need pass for dm_crypt
}


worker_runtime_network ()
{
	if ask_yesno "Do you want to (re)-configure your networking?"
	then
		interactive_runtime_network
	else
		infofy "Ok. skipping network config"
	fi
}


worker_runtime_svn ()
{
	SVN_USERNAME=dieter #TODO: softcode this
	ask_password svn #TODO: if user entered incorrect password, the install process will just fail..
	SVN="svn --username $SVN_USERNAME --password $SVN_PASSWORD"
	SVN_BASE=https://192.168.1.2/svn/repos
	ask_string "Which host are you installing?" desktop-a7nx8
	TARGET_HOST=$ANSWER_STRING #TODO: allow passing as cmdline argument (and check with svn info). handle -z $ANSWER_STRING
	_accept_ssl_cert
}


worker_prepare_disks ()
{
	svn export $SVN_BASE/ddm-configs/$TARGET_HOST/trunk/disks/.blockdata  $RUNTIME_DIR || die_error "Could not svn export $SVN_BASE/ddm-configs/$TARGET_HOST/trunk/disks/.blockdata into $RUNTIME_DIR"
	svn export $SVN_BASE/ddm-configs/$TARGET_HOST/trunk/disks/.partitions $RUNTIME_DIR || die_error "Could not svn export $SVN_BASE/ddm-configs/$TARGET_HOST/trunk/disks/.partitions into $RUNTIME_DIR"

	process_disks       || die_error "Could not process_disks"
	process_filesystems || die_error "Could not process_filesystems"

	#TODO: support rollback


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

worker_package_list ()
{
	$SVN export $SVN_BASE/ddm-configs/$TARGET_HOST/trunk/package-list $var_PKG_FILE || die_error "Could not export package list!"
	# cat -> there are newlines in it -> var=`echo $var` -> not anymore :)
	TARGET_PACKAGES=`cat $var_PKG_FILE` && TARGET_PACKAGES=`echo $TARGET_PACKAGES` || die_error "Could not cat package list. THIS SHOULD NEVER HAPPEN."
	true
}


worker_install_packages ()
{
        target_prepare_pacman core extra community #TODO: it would be better if this was a separate worker, i think
        [ -z "$TARGET_PACKAGES" ] && die_error "No packages listed to be installed!"
        installpkg
}


worker_configure_home ()
{
	#checkout from svn
	true
}


worker_set_clock ()
{
	#timezone="Europe/Brussels"
	#Not doing anything. hwclock is set already and configs are coming from svn anyway..
	true
}


worker_install_bootloader ()
{
	install-grub /dev/sda
}


worker_runtime_yaourt ()
{
	_yaourt_replace_pacman
}