Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/README.md
blob: 08e4bdfaa7b734fb16d364bf25c9a106b766ec9e (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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# <img src="logo.png" alt="drawing" width="200"/>
Just another guided/automated [Arch Linux](https://wiki.archlinux.org/index.php/Arch_Linux) installer.

Pre-built ISO's can be found here which autostarts this script *(in guided mode)*: https://hvornum.se/archiso/

# Usage

## Run on Live-CD (Binary)

    # wget https://gzip.app/archinstall
    # chmod +x archinstall; ./archinstall

This downloads and runs a "compiled" *(using nuitka)* version of the project.<br>
It defaults to starting a guided install with some safety checks in place.

## Run on Live-CD with Python:

    # wget https://raw.githubusercontent.com/Torxed/archinstall/master/installer.py
    # pacman -S --noconfirm python; python install.py

This will start a guided install with the same safety checks as previous.<br>

## Run using PIP and Python module:

    # pip install archinstall
    # python -m archinstall

Again, a guided install starts with safety checks.<br>
This assumes tho that Python and Pip is present (not always the case on the default Arch Linux ISO), see above for pre-built ISO's containing Python+pip

## Scripting a installation

So, assuming you're building your own ISO and want to create an automated install.<br>
This is probably what you'll need, a minimal example of how to install using the library.

```python
import archinstall, getpass


selected_hdd = archinstall.select_disk(archinstall.all_disks())
disk_password = getpass.getpass(prompt='Disk password (won\'t echo): ')

with archinstall.Filesystem(selected_hdd, archinstall.GPT) as fs:
    fs.use_entire_disk('luks2')
    with archinstall.luks2(fs) as crypt:
        if selected_hdd.partition[1]['size'] == '512M':
            raise OSError('Trying to encrypt the boot partition for petes sake..')

        key_file = crypt.encrypt(selected_hdd.partition[1], password=disk_password, key_size=512, hash_type='sha512', iter_time=10000, key_file='./pwfile')
        crypt.mount(selected_hdd.partition[1], 'luksloop', key_file)

    with archinstall.installer(root_partition, hostname='testmachine') as installation:
        if installation.minimal_installation():
            installation.add_bootloader()

            installation.add_additional_packages(['nano', 'wget', 'git'])
            installation.install_profile('desktop')

            installation.user_create('anton', 'test')
            installation.user_set_pw('root', 'toor')

            installation.add_AUR_support()
```

This installer will perform the following:

 * Prompt the user to select a disk and disk-password
 * Proceed to wipe said disk
 * Sets up a default 100% used disk with encryption
 * Installs a basic instance of Arch Linux *(base base-devel linux linux-firmware btrfs-progs efibootmgr)*
 * Installs and configures a bootloader
 * Install additional packages *(nano, wget, git)*
 * Installs a network-profile called `desktop` *(more on network profiles in the docs)*
 * Adds AUR support by compiling and installing [yay](https://github.com/Jguer/yay)

> **Creating your own ISO:** Follow [ArchISO](https://wiki.archlinux.org/index.php/archiso)'s guide on how to create your own ISO or use a pre-built [guided ISO](https://hvornum.se/archiso/) to skip the python installation step, or to create auto-installing ISO templates. Further down are examples and cheat sheets on how to create different live ISO's.

# Features

 * User guided install of Arch Linux *(Like most other distros have)*
 * `AUR` package support.
 * Unattended install of Arch Linux
 * Profile / Template based installs
 * Full disk encryption, locale/region settings and customizable application selection
 * YubiKey support for disk and root password *(TBD / next release)*
 * <strike>Supports offline-installation of Arch Linux</strike>
 * Never creates or leave post-install/service scripts *(usually used to finalize databases etc)*

**Default Installation Contains:** Encrypts drive, btrfs filesystem, `linux` kernel, nano, wpa_supplicant *(and dialog)* 

# Examples:

 * `./archinstall --profile=workstation --drive=/dev/sda` - Installs the [workstation](https://github.com/Torxed/archinstall/blob/master/deployments/workstation.json) template on the drive `/dev/sda`

# [Build a Arch Linux ISO to autorun archinstall](https://github.com/Torxed/archinstall/wiki/Autorun-on-Arch-Live-CD)

More options for the built ISO:

### [Unattended install of a profile](https://github.com/Torxed/archinstall/wiki/Unattended-install-of-a-profile)

### [User guided install (DEFAULT)](https://github.com/Torxed/archinstall/wiki/User-guided-installation-(DEFAULT))

### [Custom web-server for deployment profiles](https://github.com/Torxed/archinstall/wiki/Custom-web-server-for-deployment-profiles)

### [Rerunning the installation](https://github.com/Torxed/archinstall/wiki/Rerunning-the-installation)

# Some parameters you can give it

    --drive=</dev/sdX>
      Which drive to install arch on, if absent, the first disk under /dev/ is used

    --minimal
    Starts a minimal installation, and skips looking for profiles.
    
    --size=100% (Default)
      Sets the size of the root filesystem (btrfs)
    
    --start=513MiB (Default)
      Sets the starting location of the root partition
      (TODO: /boot will take up space from 1MiB - <start>, make sure boot is no larger than 513MiB)
    
    --password=0000 (Default)
      Which disk password to use,
        --password="<STDIN>" for prompt of password
        --password="<YUBIKEY>" for setting a unique password on the YubiKey and use that as a password
        (NOTE: This will wipe/replace slot 1 on the YubiKey)

    --aur-support (default)

    --pwfile=/tmp/diskpw (Default)
      Which file to store the disk encryption password while sending it to cryptsetup
    
    --hostname=Arcinstall (Default)
      Sets the hostname of the box
    
    --country=all (Default)
      Default mirror allocation for fetching packages.
      If network is found, archinstall will try to attempt and guess which country the
      install originates from, basing it off GeoIP off your public IP (uses https://hvornu.se/ip/ for lookups)
    
    --packages='' (Default)
      Which additional packages to install, defaults to none.
      (Space separated as it's passed unchanged to `pacstrap`
    
    --user=<name>
      Adds an additional username to the system (default group Wheel)
    
    --post=reboot (Default)
      After a successful install, reboots into the system. Use --post=stay to not reboot.

    --unattended
      This parameter causes the installation script to install arch unattended on the first disk

    --profile=<name>
      For instance, --profile=workstation will install the workstation profile.

    --profiles-path=https://example.com/profiles
      Changes the default path the script looks for deployment profiles.
      The default path is 'https://raw.githubusercontent.com/Torxed/archinstall/master/deployments'

    --rerun="Name of step in profile"
      Enables you to skip the format, encryption and base install steps.
      And head straight for a step in the profile specified.
      (Useful for debugging a step in your profile)

    --localtime="Europe/Stockholm" (Default if --country=SE, otherwise GMT+0)
      Specify a localtime you're used to.

Deployment profile structs support all the above parameters and more, for instance, custom arguments with string formatting.
See [deployments/workstation.json](https://github.com/Torxed/archinstall/blob/net-deploy/deployments/workstation.json) for examples.

# Contact

IRC: `#archinstall@FreeNode`

## End note

 ![description](description.jpg)