# .. vim: foldmarker=[[[,]]]:foldmethod=marker
#
## Note [[[
######################################################################

## This preseed file will :
#	Use LVM partitioning.
#	Format the root with BTRFS.
#	Install Debian Stretch/Stable.
#	Call for a last script (to order log files, create btrfs subvolumes,…).
#	Use the first device for system and boot. If you want to use another device,
#	you must change :
#	 partman-auto/disk
#	 grub-installer/bootdev


## ]]]
## Howto use [[[
######################################################################

## With a PXE boot:
#label StretchPreseed
#    menu label Debian ^Stretch 64 bits WITH PRESEED
#    kernel installer/debian/stretch/amd64/linux
#    IPAPPEND 2
#    APPEND vga=normal initrd=installer/debian/stretch/amd64/initrd_firm.gz auto=true interface=auto netcfg/dhcp_timeout=60 netcfg/choose_interface=auto priority=critical preseed/url=tftp://WWW.XXX.YYY.ZZZ/installer/debian/stretch/amd64/preseed.cfg

################################################################## ]]]
## Localization [[[
######################################################################

## Install Time
### Preseeding only locale sets language, country and locale.
#d-i debian-installer/locale string en_US

## The values can also be preseeded individually for greater flexibility.
d-i   debian-installer/language                   string      en
d-i   debian-installer/country                    string      FR
d-i   debian-installer/locale                     select      en_US.UTF-8
d-i   debian-installer/fallbacklocale             select      en_US.UTF-8
d-i   localechooser/supported-locales             multiselect fr_FR.UTF-8
d-i   debian-installer/keymap                     string      fr-latin9

## Choose language
d-i   localechooser/languagelist                  select      en

## Choose keyboard configuration
d-i   console-tools/archs                         string      skip-config
d-i   console-keymaps-at/keymap                   select      fr-latin9
d-i   keyboard-configuration/xkb-keymap           select      French

################################################################## ]]]
## Network configuration [[[
######################################################################

## Auto-configure networking
d-i   netcfg/use_autoconfig                       boolean     true

# Disable that annoying WEP key dialog.
d-i   netcfg/wireless_wep                         string

## To set a different link detection timeout (default is 3 seconds).
## Values are interpreted as seconds.
d-i   netcfg/link_detection_timeout               string      20
d-i   netcfg/link_wait_timeout                    string      3

## If you have a slow dhcp server and the installer times out waiting for
## it, this might be useful.
d-i   netcfg/dhcp_timeout                         string      60
d-i   netcfg/dhcpv6_timeout                       string      1

## Network Configuration
d-i   netcfg/get_hostname                         string      unassigned-hostname
d-i   netcfg/get_domain                           string      unassigned-domain

## If non-free firmware is needed for the network or other hardware, you can
## configure the installer to always try to load it, without prompting. Or
## change to false to disable asking.
d-i   hw-detect/load_firmware                     boolean     true

################################################################## ]]]
## Remote install (Manual) [[[
######################################################################

## Use the following settings if you wish to make use of the network-console
## component for remote installation over SSH. This only makes sense if you
## intend to perform the remainder of the installation manually.
#d-i anna/choose_modules string network-console
#d-i network-console/authorized_keys_url string http://10.0.0.1/openssh-key
#d-i network-console/password password r00tme
#d-i network-console/password-again password r00tme

################################################################## ]]]
## Mirror settings [[[
######################################################################

## Mirror
d-i   mirror/country                              string      FR
d-i   mirror/http/hostname                        string      ftp.fr.debian.org
d-i   mirror/http/directory                       string      /debian/
d-i   mirror/http/proxy                           string
d-i   mirror/http/mirror                          string      ftp.fr.debian.org
d-i   mirror/suite                                string      stretch

################################################################## ]]]
## Account [[[
######################################################################

## Enable shadow passwords
d-i   passwd/shadow                               boolean     true

## Allow login as root?
d-i   passwd/root-login                           boolean     true

## Root password in clear text
#d-i   passwd/root-password                        password    r00tme
#d-i   passwd/root-password-again                  password    r00tme
## ... or encrypted with {MD5, SHA512, …) hash
d-i   passwd/root-password-crypted                password    $6$ceGTxMxc$gXajYByJna1cfTjaST3TcF0FfrlSAaEcmCiOMq/DBOuD0tlu8VYQosZPgwcFT4bCuODMErU/fgRxZEeu9c10V0

## Create a normal user account now?
d-i   passwd/make-user                            boolean     false

## User name
#d-i   passwd/user-fullname                        string      bob
#d-i   passwd/username                             string      bob
## User password in clear text
#d-i   passwd/user-password                        password    insecure
#d-i   passwd/user-password-again                  password    insecure
## ... or encrypted with MD5 hash
#d-i   passwd/user-password-crypted                password    $1$098f6bcd4621d373cade4e832627b4f6

## Set User UID
#d-i   passwd/user-uid                             string      1000

################################################################## ]]]
## Clock and time zone setup [[[
######################################################################

## Material clock on UTC
d-i   clock-setup/utc                             boolean     true
d-i   time/zone                                   string      Europe/Paris

## Use NTP to set time
d-i   clock-setup/ntp                             boolean     true
d-i   clock-setup/ntp-server                      string      0.fr.pool.ntp.org

################################################################## ]]]
## Disk Partitioning/Boot loader [[[
######################################################################

## If the system has only one disk the installer will default to using it.
## Otherwise, the device name must be given
d-i   partman-auto/disk                           string      /dev/nvme0n1 /dev/sdb /dev/sda /dev/vda

## Specify the method to use
### - regular: use the usual partition types for the architecture
### - lvm: use LVM to partition the disk
### - crypto: use LVM within an encrypted partition
d-i   partman-auto/method                         string      lvm

## It's not ok to have /boot in the LVM
d-i   partman-auto-lvm/no_boot                    boolean     false

## Remove old LVM configuration
d-i   partman-lvm/device_remove_lvm               boolean     true
d-i   partman-lvm/device_remove_lvm_span          boolean     true
d-i   partman-auto/purge_lvm_from_device          boolean     true

## Remove old RAID configuration
d-i   partman-md/device_remove_md                 boolean     true
d-i   partman-md/confirm                          boolean     true

## Confirm to write the LVM partitions
d-i   partman-lvm/confirm                         boolean     true
d-i   partman-lvm/confirm_nooverwrite             boolean     true

## Volume Group/vg
d-i   partman-auto-lvm/new_vg_name                string      sys

### From stretch, need to specify the expected size
d-i   partman-auto-lvm/guided_size                string      max

d-i   partman-auto/expert_recipe                  string      \
      boot-root ::                                            \
              200 200000 400 ext2                             \
                      $primary{ } $bootable{ }                \
                      method{ format } format{ }              \
                      use_filesystem{ } filesystem{ ext2 }    \
                      mountpoint{ /boot }                     \
              .                                               \
              16000 100000 80000 btrfs                        \
                      $lvmok{ } lv_name{ lv_root }            \
                      in_vg { sys }                           \
                      $primary{ }                             \
                      method{ format } format{ }              \
                      use_filesystem{ } filesystem{ btrfs }   \
                      mountpoint{ / }                         \
              .                                               \
              50% 2000 75% linux-swap                         \
                      $lvmok{ } lv_name{ lv_swap }            \
                      in_vg { sys }                           \
                      $primary{ }                             \
                      method{ swap } format{ }                \
              .                                               \
              100 100 -1 ext2                                 \
                      $lvmok{ } lv_name{ lv_free }            \
                      in_vg { sys }                           \
                      $primary{ }                             \
                      method{ format } format{ }              \
                      use_filesystem{ } filesystem{ ext2 }    \
                      mountpoint{ /mnt/free }                 \
              .

## Return to menu if no mount point is assigned to a filesystem
d-i   partman-basicfilesystems/no_mount_point     boolean     false

## Automatically partition without confirmation
d-i   partman/confirm_write_new_label             boolean     true
d-i   partman/choose_partition                    select      finish
d-i   partman/confirm                             boolean     true
d-i   partman/confirm_nooverwrite                 boolean     true

################################################################## ]]]
## Kernel [[[
######################################################################

## Kernel to install
d-i   base-installer/kernel/image                 select      linux-image-amd64

## Drivers to include in the initrd
d-i   base-installer/initramfs-tools/driver-policy select      most

################################################################## ]]]
## APT configuration // Package selection [[[
######################################################################

## Post install APT setup
d-i   apt-setup/uri_type                          select      d-i
d-i   apt-setup/hostname                          string      ftp.fr.debian.org
d-i   apt-setup/directory                         string      /debian/
d-i   apt-setup/another                           boolean     false
d-i   apt-setup/security-updates                  boolean     false
d-i   apt-setup/services-select                   multiselect security
d-i   apt-setup/non-free                          boolean     true
d-i   apt-setup/contrib                           boolean     true
d-i   apt-setup/enable-source-repositories        boolean     true

## Ensure to use a network mirror
### Set to false for an offline installation
d-i   apt-setup/use_mirror                        boolean     true

## Choose packages
tasksel tasksel/first                             multiselect ssh-server standard gnome-desktop

## Individual additional packages to install
### tftp-hpa to download an archive (see preseed/late_command at the end of this file)
d-i   pkgsel/include                              string      tftp-hpa

## Whether to upgrade packages after debootstrap.
### Allowed values: none, safe-upgrade, full-upgrade
d-i   pkgsel/upgrade                              select      full-upgrade

## Participate to Popularity Contest (disable for an unconnected server)
d-i   popularity-contest/participate              boolean     true

## For CD/DVD case
### Don't scan for additional CD/DVD
d-i  apt-setup/cdrom/set-first                    boolean     false
d-i  apt-setup/cdrom/set-double                   boolean     false
d-i  apt-setup/cdrom/set-next                     boolean     false
d-i  apt-setup/cdrom/set-failed                   boolean     false

################################################################## ]]]
## Boot loader [[[
######################################################################

## Grub is the default boot loader (for x86). If you want lilo installed
## instead, uncomment this:
#d-i grub-installer/skip boolean true
## To also skip installing lilo, and install no bootloader, uncomment this too:
#d-i lilo-installer/skip boolean true

## This is fairly safe to set, it makes grub install automatically to the MBR
## if no other operating system is detected on the machine.
d-i   grub-installer/only_debian                  boolean     true

## This one makes grub-installer install to the MBR if it also finds some other
## OS, which is less safe as it might not be able to boot that other OS.
d-i   grub-installer/with_other_os                boolean     true

## Since Debian Jessie, the d-i will ask to specify the device for Grub.
## Should use 'default', to use the default system disk
###   Fix: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=759737
d-i   grub-installer/bootdev                      string      /dev/sdb

################################################################## ]]]
## Finishing up the installation [[[
######################################################################

## Avoid that last message about the install being complete.
d-i   finish-install/reboot_in_progress           note
d-i   prebaseconfig/reboot_in_progress            note

## This will prevent the installer from ejecting the CD during the reboot,
## which is useful in some situations.
d-i   cdrom-detect/eject                          boolean     false

## This is how to make the installer shutdown when finished, but not
## reboot into the installed system.
#d-i debian-installer/exit/halt boolean true

## This will power off the machine instead of just halting it.
#d-i debian-installer/exit/poweroff boolean true

## Execute some last commands
#in-target wget -O /tmp/latecommand.tar.gz "https://wiki.101010.fr/lib/exe/fetch.php?media=documentation:administration_systeme:latecommand.tar.gz" --no-check-certificate ; \
d-i preseed/late_command string in-target umount /dev/sys/lv_free ; \
lvremove -f /dev/sys/lv_free ; \
wget -O /tmp/part.btrfs.sh "https://git.101010.fr/gardouille-dotfiles/scripts/raw/master/debian/part.btrfs.sh" ; \
chmod +x /tmp/part.btrfs.sh && /tmp/part.btrfs.sh ; \
in-target /bin/rmdir /mnt/free ; in-target /bin/sed -i '/lv_free/d' /etc/fstab ; \
in-target /bin/sed -i 's/\(^\|^\#\)\(PermitRootLogin\).*/\2 yes/g' /etc/ssh/sshd_config ; \
in-target wget -O /tmp/latecommand.tar.gz "https://git.ipr.univ-rennes1.fr/cellinfo/tftpboot/raw/master/scripts/latecommand.tar.gz" --no-check-certificate ; \
in-target tar xzf /tmp/latecommand.tar.gz -C /tmp/ ; \
in-target /bin/sh /tmp/latecommand/post.stretch.sh
################################################################## ]]]