initial commit
This commit is contained in:
commit
8f331bacc3
24
install.sh
Executable file
24
install.sh
Executable file
@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
PASS="mediabox"
|
||||
HOSTNAME="mediabox"
|
||||
|
||||
# get the directory of the script
|
||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
echo "Enter the ip address of the server:"
|
||||
read ip
|
||||
|
||||
# if ip is not empty
|
||||
if [ ! -z "$ip" ]; then
|
||||
# write the ip to the inventory file
|
||||
echo "$ip" > "$DIR/inventory"
|
||||
fi
|
||||
|
||||
echo "run 'passwd' on the archiso and chage the root password to something"
|
||||
|
||||
ansible-playbook -v -i "inventory" playbook.yml --ask-pass --user root \
|
||||
--extra-vars user_password="$(openssl passwd -crypt $PASS)" \
|
||||
--extra-vars hostname="$HOSTNAME"
|
21
kodi.service
Normal file
21
kodi.service
Normal file
@ -0,0 +1,21 @@
|
||||
# Stolen from here: https://github.com/graysky2/kodi-standalone-service
|
||||
|
||||
[Unit]
|
||||
Description=Kodi standalone
|
||||
After=remote-fs.target systemd-user-sessions.service network-online.target nss-lookup.target sound.target bluetooth.target polkit.service upower.service mysqld.service lircd.service
|
||||
Wants=network-online.target polkit.service upower.service
|
||||
Conflicts=getty@tty1.service
|
||||
|
||||
[Service]
|
||||
User=mediabox
|
||||
Group=mediabox
|
||||
PAMName=login
|
||||
TTYPath=/dev/tty1
|
||||
ExecStart=/usr/bin/kodi-standalone
|
||||
ExecStop=/usr/bin/killall --user mediabox --exact --wait kodi.bin
|
||||
Restart=on-abort
|
||||
StandardInput=tty
|
||||
StandardOutput=journal
|
||||
|
||||
[Install]
|
||||
Alias=display-manager.service
|
134
playbook.yml
Normal file
134
playbook.yml
Normal file
@ -0,0 +1,134 @@
|
||||
---
|
||||
- hosts: all
|
||||
vars:
|
||||
install_drive: /dev/sda
|
||||
boot_partition_suffix: 1
|
||||
timezone: Europe/Berlin
|
||||
user_name: mediabox
|
||||
tasks:
|
||||
- name: Abort if the host is not booted from the Arch install media
|
||||
fail:
|
||||
msg: "This host is not booted from the Arch install media!"
|
||||
when: ansible_nodename != 'archiso'
|
||||
- name: Synchronize clock via NTP
|
||||
command: timedatectl set-ntp true
|
||||
- name: Repartition install drive
|
||||
block:
|
||||
- name: Wipe install drive and all its partitions
|
||||
command: find /dev -wholename "{{ install_drive }}*" -exec wipefs --force --all {} \;
|
||||
- name: Create boot partition
|
||||
parted:
|
||||
device: '{{ install_drive }}'
|
||||
label: gpt
|
||||
number: 1
|
||||
part_end: 512MB
|
||||
name: boot
|
||||
flags: [boot, esp]
|
||||
state: present
|
||||
- name: Create root partition
|
||||
parted:
|
||||
device: '{{ install_drive }}'
|
||||
label: gpt
|
||||
number: 2
|
||||
part_start: 512MB
|
||||
name: root
|
||||
flags: []
|
||||
state: present
|
||||
- name: Create filesystems
|
||||
block:
|
||||
- name: Create FAT32 filesystem in boot partition
|
||||
filesystem:
|
||||
dev: '{{ install_drive }}1'
|
||||
fstype: vfat
|
||||
opts: -F32
|
||||
force: yes
|
||||
- name: Create ext4 filesystem in root volume
|
||||
filesystem:
|
||||
dev: '{{ install_drive }}2'
|
||||
fstype: ext4
|
||||
force: yes
|
||||
- name: Get UUID for boot filesystem
|
||||
command: blkid -s UUID -o value '{{ install_drive }}1'
|
||||
register: boot_uuid
|
||||
changed_when: false
|
||||
- name: Get UUID for root filesystem
|
||||
command: blkid -s UUID -o value '{{ install_drive }}2'
|
||||
register: root_uuid
|
||||
changed_when: false
|
||||
- name: Mount filesystems
|
||||
block:
|
||||
- name: Mount root filesystem
|
||||
mount:
|
||||
path: /mnt
|
||||
src: UUID={{ root_uuid.stdout }}
|
||||
fstype: ext4
|
||||
state: mounted
|
||||
- name: Create mountpoint for boot volume
|
||||
file:
|
||||
path: /mnt/boot
|
||||
state: directory
|
||||
- name: Mount boot filesystem
|
||||
mount:
|
||||
path: /mnt/boot
|
||||
src: UUID={{ boot_uuid.stdout }}
|
||||
fstype: vfat
|
||||
state: mounted
|
||||
- name: Run pacstrap
|
||||
command: pacstrap /mnt base base-devel efibootmgr grub linux linux-firmware openssh python reflector sudo networkmanager kodi lzo polkit vim
|
||||
- name: Generate fstab
|
||||
command: genfstab -U /mnt >> /mnt/etc/fstab
|
||||
- name: Set local timezone
|
||||
command: arch-chroot /mnt ln -sf /usr/share/zoneinfo/{{ timezone }} /etc/localtime
|
||||
- name: Generate adjtime file
|
||||
command: arch-chroot /mnt hwclock --systohc
|
||||
- name: Setup locales
|
||||
block:
|
||||
- name: Configure locale.gen
|
||||
lineinfile:
|
||||
dest: /mnt/etc/locale.gen
|
||||
regexp: '{{ item.regex }}'
|
||||
line: '{{ item.line }}'
|
||||
loop:
|
||||
- {regex: en_US\.UTF-8 UTF-8, line: en_US.UTF-8 UTF-8}
|
||||
- {regex: en_US ISO-8859-1, line: en_US ISO-8859-1}
|
||||
- name: Create locale.conf
|
||||
copy:
|
||||
content: "LANG=en_US.UTF-8"
|
||||
dest: /mnt/etc/locale.conf
|
||||
- name: Generate locales
|
||||
command: arch-chroot /mnt locale-gen
|
||||
- name: Set hostname
|
||||
copy:
|
||||
content: '{{ hostname }}'
|
||||
dest: /mnt/etc/hostname
|
||||
- name: Set up initramfs
|
||||
command: arch-chroot /mnt mkinitcpio -p linux
|
||||
- name: Set up grub
|
||||
block:
|
||||
- name: Install grub
|
||||
command: arch-chroot /mnt grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
|
||||
- name: Create grub config
|
||||
command: arch-chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
|
||||
- name: Setup user account
|
||||
block:
|
||||
- name: Create user account
|
||||
command: arch-chroot /mnt useradd --create-home --user-group --groups wheel,input {{ user_name }} --password {{ user_password }}
|
||||
- name: Give passwordless sudo access to wheel group
|
||||
copy:
|
||||
content: '%wheel ALL=(ALL) NOPASSWD: ALL'
|
||||
dest: /mnt/etc/sudoers.d/wheel
|
||||
validate: /usr/sbin/visudo --check --file=%s
|
||||
- name: Change root pw
|
||||
command: arch-chroot /mnt echo "root:{{user_password}}" | chpasswd
|
||||
- name: Enable NetworkManager
|
||||
command: arch-chroot /mnt systemctl enable NetworkManager
|
||||
- name: Enable SSH server
|
||||
command: arch-chroot /mnt systemctl enable sshd
|
||||
- name: Insert Kodi service
|
||||
block:
|
||||
- name: Create systemd service file
|
||||
copy:
|
||||
src: "{{playbook_dir}}/kodi.service"
|
||||
dest: /mnt/etc/systemd/system/kodi.service
|
||||
- name: Enable kodi service
|
||||
command: arch-chroot /mnt systemctl enable kodi.service
|
Loading…
Reference in New Issue
Block a user