summaryrefslogtreecommitdiff
path: root/README
blob: 3d4bed54d1470f733584cc19635346a8aea52b2a (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
FIFA is a Flexible Installer Framework for Arch linux.

---  Very, very early in development.  Use at own risk!! ---


Licensce:     GPL3. See COPYING.
Author:       Dieter Plaetinck
Homepage:     http://github.com/Dieterbe/fifa


** Goals **
The goal of this project is 
1) to allow you to install Arch Linux in more flexible and powerful ways.
2) write an automated (unattended) installer
3) Apply DRY patterns to the installation procedure, making it more easy to maintain the code.


You can choose to use unattended (automatic) installation (you can write different profiles for different scenario's,
and/or use autodetection) or prompt the user for whatever you want to know (you could mimic the official installer like
that).
You can also take parts from different profiles (installation procedures) and combine them
together to come up with the installation procedure of your liking.


** File locations (on the install CD): **
Basically fifa.sh is put in /arch (together with the default installer scripts), while all other fifa-related files belong in /home/arch/fifa

* fifa.sh   -> /arch/fifa.sh
* libraries -> /home/arch/fifa/lib
* docs      -> /home/arch/fifa/docs
* profiles  -> /home/arch/fifa/profiles
* pkg list  -> /home/arch/fifa/packages-list (can be overridden)


** Workflow **
Profiles are stored like /home/arch/fifa/profiles/profile-*
You can put your custom profiles there too. Give them a recognizable name
that doesn't exist yet.

There is a very basic but powerful workflow defined by variables, phases and workers.
Depending on the profile you choose (or write yourself), these will differ
In the code, they are very recognizable and are named like this:
 - variable -> var_<foo>
 - phase    -> phase_<bar> (a function that calls workers and maybe does some stuff by itself.) 
               There are 4 phases: preparation, basics, system, finish. (executed in that order)
 - worker   -> worker_<baz> ( a worker function, called by a phase. implements some specific logic.
               eg runtime_packages, prepare_disks, package_list etc)

If you specify a profile name other then base, the base profile will be sourced first, then the specific
profile.  This way you only need to override specific things.

Notes:
 - you _can_ override _all_ variables and functions in profiles, but you should be able to achieve your goals by
                overriding things of these 3 classes
 - you _must_ specify a profile, to avoid errors. take 'base' if unsure
 - don't edit the base profile (or any other that comes by default), rather make your own. It's easy!
 - The phases are started by the start_process function.  You can also override this function to take flow control in your own hands (eg iterative, menu-based installer)