Does Preseeding still work?

This is what I’ve done:

  1. Manually wrote OSMC image to USB drive with dd (no installer for Linux afaik)

  2. Created a preseed.cfg file at the root of the USB drive with the following contents:

    d-i target/storage string sd
    d-i network/interface string wlan
    d-i network/auto boolean false
    d-i network/ip string 192.168.1.6
    d-i network/mask string 255.255.255.0
    d-i network/dns1 string 208.67.222.222
    d-i network/dns2 string 208.67.220.220
    d-i network/gw string 192.168.1.1
    d-i network/ssid string MY_SSID
    d-i network/wlan_keytype string 1
    d-i network/wlan_key string MY_PASSWORD

  3. Powered off Vero 4K, plugged USB drive, powered back on (as per instructions)

  4. Waited for OSMC to install

Unfortunately I ended up at the installer’s configuration screen with no preseeded network settings. After the installation my USB drive contained an “install.log” file with the following relevant lines:

(...)
Thu Jan 1 00:00:16 2015 Preseed file found, will attempt to parse
Thu Jan 1 00:00:16 2015 Found a definition for storage: sd
Thu Jan 1 00:00:16 2015 Flash looks OK
Thu Jan 1 00:01:22 2015 Creating root partition
(...)

Which indicates that the preseed config was actually detected, but only the first definition was taken into account…

Hi

It should still work fine.
Can you paste the full install log?

Cheers

Sam

Hey Sam

Here it is:

Thu Jan 1 00:00:13 2015 Starting OSMC installer
Thu Jan 1 00:00:16 2015 Detecting device we are running on
Thu Jan 1 00:00:16 2015 Mounting boot filesystem
Thu Jan 1 00:00:16 2015 Trying to mount to MNT_BOOT (/mnt/boot)
Thu Jan 1 00:00:16 2015 Using device->boot: /dev/mmcblk1p1 and FS: fat32
Thu Jan 1 00:00:16 2015 Trying to mount to MNT_BOOT (/mnt/boot)
Thu Jan 1 00:00:16 2015 Using device->boot: /dev/sda1 and FS: fat32
Thu Jan 1 00:00:16 2015 Filesystem defined by /mnt/boot/filesystem.tar.xz
Thu Jan 1 00:00:16 2015 Preseed file found, will attempt to parse
Thu Jan 1 00:00:16 2015 Found a definition for storage: sd
Thu Jan 1 00:00:16 2015 Flash looks OK
Thu Jan 1 00:01:22 2015 Creating root partition
Thu Jan 1 00:01:23 2015 Calling fmtpart for partition /dev/vero-nand/root and fstype ext4
Thu Jan 1 00:01:26 2015 Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=2 blocks, Stripe width=1024 blocks
930240 inodes, 3716096 blocks
185804 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=3808428032
114 block groups
32768 blocks per group, 32768 fragments per group
8160 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   


Thu Jan 1 00:01:26 2015 From a root partition of /dev/vero-nand/root, I have deduced a base device of /dev/vero-nand/roo
Thu Jan 1 00:01:26 2015 Mounting root
Thu Jan 1 00:01:26 2015 Trying to mount to MNT_ROOT (/mnt/root)
Thu Jan 1 00:01:26 2015 Using device->root: /dev/vero-nand/root
Thu Jan 1 00:01:26 2015 Extracting files to root filesystem
Thu Jan 1 00:01:26 2015 Starting extract process ...
Thu Jan 1 00:01:26 2015 Extracting from /mnt/boot/filesystem.tar.xz
Thu Jan 1 00:02:27 2015 Extraction of root filesystem completed
Thu Jan 1 00:02:27 2015 Configuring bootloader
Thu Jan 1 00:02:27 2015 Boot changed. Re-mounting the real /boot
Thu Jan 1 00:02:27 2015 Trying to unmount MNT_BOOT (/mnt/boot)
Thu Jan 1 00:02:27 2015 Using device->boot: /dev/sda1
Thu Jan 1 00:02:27 2015 Could not unmount old boot partition
Thu Jan 1 00:02:27 2015 Trying to mount to MNT_BOOT (/mnt/boot)
Thu Jan 1 00:02:27 2015 Using device->boot: /dev/sda1 and FS: fat32
Thu Jan 1 00:02:27 2015 Could not mount new boot partition
Thu Jan 1 00:02:27 2015 Configuring bootloader: moving /boot to appropriate boot partition
Thu Jan 1 00:02:28 2015 Vero 4K family: bootloader to be flashed is uboot-vero4k.bin
Thu Jan 1 00:02:28 2015 Configuring boot cmdline
Thu Jan 1 00:02:28 2015 Configuring /etc/fstab
Thu Jan 1 00:02:28 2015 Successful installation. Dumping log and rebooting system

I’ve checked and the preseeder is being detected in your scenario and it’s parsed.
It should then be copied to /boot/preseed.cfg on your actual installation.

Can you check if this is the case?
The WiFi set up is parsed on the next boot of the actual OS, which is why you don’t see further verbose messages about this.

Sam

I just checked /boot/preseed.cfg and the definitions are indeed there.

However I had 1) already configured the network settings through the GUI installer previously 2) run the preseed command through SSH, just to see what would happen (it apparently hangs and I had to terminate).

Should I try the whole process again from the start to be sure?

That could be the problem.

I’ve got a better idea for how to handle network preseeding in the future in such a way that it would work more reliably.

I run the preseed command only after preseed.cfg failed to pre-configure the network settings though so I don’t think that was the problem. I will try re-installing again and then check /boot/preseed.cfg, without running the preseed command, and get back to you.

By the way if you are planning to change the preseeding process, please consider adding other non-network preseeding options (e.g. timezone, hostname, etc) so that a completely headless installation is possible. That would be really helpful.

That’s an interesting suggestion.
It would be good if we could build a list of things that users would want to customise.

Alright so I tried again and I can confirm it’s not working, for whatever reason…

  1. I followed the same process as before, but I added one more definition into preseed.cfg, namely globe/locale which I accidentally found by looking at the source code

  2. OSMC was installed and then I ended up again with no pre-configured network connectivity

  3. I completed the installation, SSH’ed into the device and looked for /boot/preseed.cfg, which was not there this time

  4. The file install.log was identical with the one from my previous attempt but with the addition of globalisation definition

    (…)
    Sun Jan 1 00:00:16 2017 Preseed file found, will attempt to parse
    Sun Jan 1 00:00:16 2017 Found a definition for globalisation: en_US
    Sun Jan 1 00:00:16 2017 Could not load translation
    Sun Jan 1 00:00:16 2017 Found a definition for storage: sd
    Sun Jan 1 00:00:16 2017 Flash looks OK
    Sun Jan 1 00:01:20 2017 Creating root partition
    (…)

  5. Then I run the preseed command, again just to see what will happen, which completed with no output

  6. sudo journalctl | grep preseed gave the following:
    Oct 25 21:53:48 osmc preseed[3315]: No preseed file found

I have no idea why /boot/preseed.cfg was not found this time. The only difference with my previous attempt was the addition of the locale definition, which was actually found and parsed, although unsuccessfully probably because I provided a wrong value.

Other than that everything is correct so I give up and I’ll be happy to wait for any future changes in the preseeding process.

I suppose there could be a lot customizations possible, but here is the list of the bare minimum:

  • Network settings (+ a hostname option)
  • Language
  • Timezone
  • Time format
  • SSH
  • Look+Feel
  • A boolean flag for having read the License
  • A boolean flag for having read the Warranty

The above are actually all the options the GUI installer needs to complete (minus the time format), so if there was a way to preseed them it would become possible to make a completely headless installation without any user interaction.

Wait… do you mean that I should just skip the network configuration on the first boot, complete the installation process by going through the remaining screens, then reboot the device and wait for the network settings in preseed.cfg to be picked up??

Yes – that should be it.

It didn’t work either, unfortunately.

I think we can safely assume that presseding is broken, unless there’s any evidence to the contrary…

Have you tried generating a preseed file and executing the preseed daemon?

I tried this on 4.9 and it worked…

I’m not sure what you mean… I did generate a preseed file (the one I put at the root of my USB drive, as I outlined in my post). As for the preseeding daemon, are you refering to the preseed command?
Connecting via Ethernet, then SSH’ing into the device and manually executing any command so that preseed.cfg gets picked up defeats the whole purpose of preseeding anyway.

It runs on first boot.