Introduction

This is an installation record for installing Debian Stretch on the XPS13 9350 Developer Edition.

You will need:

  • A Dell XPS13 9350 Developer Edition
  • Two USB sticks (8GB should be sufficient)
  • An install image for Debian Stretch (I recommend the netinst image)
  • Wifi

Thanks to the Ubuntu install already on the laptop everything can probably be done on the laptop, but I'm doing most of it on my desktop.

Setup

  1. Start the laptop as per the Quick Start Guide and get Ubuntu set up.
    • During the Ubuntu setup it will prompt you for one of your USB sticks to make a liveusb.
    • Don't forget to label the stick or you'll get confused later.
  2. Write the install image to to the other USB stick.

    • This used to require dd but nowadays you can just do it with cp.

      cp installer.iso /dev/sdd

    • Don't forget to label the stick or you'll get confused later. The installer image will include two partitions.
  3. Add another partition and format it. We're going to put the wireless firmware on this partiton.
  4. Mount the third partition on /mnt
  5. Create a directory 'firmware' on the third partition and1:

    cp /lib/firmware/iwlwifi-8000C-* /mnt/firmware/

  6. Shut down ubuntu
  7. Restart the laptop and press F2 when the Dell logo appears to enter BIOS setup mode.
  8. Under "Secure Boot > Secure Boot Enable" select (•) Disabled.
  9. If you have any problem booting the USB then under "General > Advanced Boot Options" select [✓] Enable Legacy Option ROMs.
  10. Apply your changes.
  11. You may want to change other settings here. In particular if you want to run VMs on your system ensure that the Virtualization settings are turned on.
  12. Exit

NOTE: We need to remember to turn Legacy Option ROMs off once we're done.

NOTE: Debian doesn't currently support Secure Boot; but probably will do in the future.

Repartitioning

This sequence could probably be combined with installation below; but I'm paranoid and want to ensure I can still run ubuntu before destructively installing debian.

  1. Press F12 when the Dell logo appears to enter BIOS Boot Menu
  2. Select USB
  3. After a few seconds the laptop will beep very loudly and GRUB will come up. Select Advanced Options > Expert Installation.
  4. Run the following stages of the installer menu:

    • Choose Language
    • Configure the keyboard
    • Detect and mount CD-ROM
    • Load installer components from CD: loading network-console
    • Detect network hardware:

      • This will prompt for a removable media with the firmware files as above2. d-i probably won't detect the partition on sda3; so Alt-→ to the next console and do:

        mount -oext2 /dev/sda3 /media

      • Alt-← to return to the installer menu.
      • d-i will prompt for the missing firmware files again, but won't complain if you tell it to scan again.
    • Configure the network
    • Detect disks
  5. Configure installation remotely using SSH. This isn't really necessary but it makes life significantly easier.
    • This will prompt for a password and then give instructions for logging in remotely.
    • Log in from your desktop
    • Select "Start shell"
  6. Alternatively Alt-→ again to use the console.
  7. Some system information:

    ~ # fdisk -l /dev/nvme0n1
    Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6F4D25D6-8E9A-4642-91F6-8B9123AE66AB
    
    
    Device             Start        End   Sectors   Size Type
    /dev/nvme0n1p1      2048    1026047   1024000   500M EFI System
    /dev/nvme0n1p2   1026048    7317503   6291456     3G Microsoft basic data
    /dev/nvme0n1p3   7317504  933734399 926416896 441.8G Linux filesystem
    /dev/nvme0n1p4 933734400 1000214527  66480128  31.7G Linux swap
    ~ # mount -oro /dev/nvme0n1p3 /mnt
    ~ # df -h /dev/nvme0n1p3
    Filesystem                Size      Used Available Use% Mounted on
    /dev/nvme0n1p3          434.7G      6.3G    406.3G   2% /mnt
    ~ # umount /dev/nvme0n1p3
    ~ # tune2fs -l /dev/nvme0n1p3
    tune2fs 1.43-WIP (15-Mar-2016)
    Filesystem volume name:   <none>
    Last mounted on:          /
    Filesystem UUID:          a64ddc80-e9a1-4002-b509-ab82813b4c89
    Filesystem magic number:  0xEF53
    Filesystem revision #:    1 (dynamic)
    Filesystem features:      has_journal ext_attr resize_inode
    dir_index filetype extent flex_bg sparse_super large_file
    huge_file uninit_bg dir_nlink extra_isize
    Filesystem flags:         signed_directory_hash
    Default mount options:    user_xattr acl
    Filesystem state:         clean
    Errors behavior:          Continue
    Filesystem OS type:       Linux
    Inode count:              28950528
    Block count:              115802112
    Reserved block count:     5790105
    Free blocks:              112304287
    Free inodes:              28723624
    First block:              0
    Block size:               4096
    Fragment size:            4096
    Reserved GDT blocks:      996
    Blocks per group:         32768
    Fragments per group:      32768
    Inodes per group:         8192
    Inode blocks per group:   512
    Flex block group size:    16
    Filesystem created:       Tue May 24 17:01:33 2016
    Last mount time:          Wed Jun  8 22:49:18 2016
    Last write time:          Wed Jun  8 22:49:18 2016
    Mount count:              23
    Maximum mount count:      -1
    Last checked:             Tue May 24 17:01:33 2016
    Check interval:           0 (<none>)
    Lifetime writes:          16 GB
    Reserved blocks uid:      0 (user root)
    Reserved blocks gid:      0 (group root)
    First inode:              11
    Inode size:               256
    Required extra isize:     28
    Desired extra isize:      28
    Journal inode:            8
    Default directory hash:   half_md4
    Directory Hash Seed:      d91fc1a7-cf0d-48c4-a69e-b96c4768ec41
    Journal backup:           inode blocks    
    ~ # resize2fs -P /dev/nvme0n1p3
    resize2fs 1.43-WIP (15-Mar-2016)
    Estimated minimum size of the filesystem: 2060940    
    
    • /dev/nvme0n1p1 is the EFI partition.
    • /dev/nvme0n1p2 appears to contain the same stuff as the ubuntu USB we made earlier; presumably it's the installer for the base install.
    • /dev/nvme0n1p3 is the main ubuntu install.
    • /dev/nvme0n1p4 is the ubuntu swap.

    We want to resize /dev/nvme0n1p3 to, say, 32G. tune2fs says the block size is 4k and resize2fs estimates a minimum size of 2060940 blocks so that's about 8G, which is all consistent.

    We want to move the ubuntu swap to just after the ubuntu partition and resize it; I think 8G should be enough since I'm not planning on doing anything hard in ubuntu.

    NOTE: This swap isn't encrypted, so we don't want to use it for Debian.

  8. Resize /dev/nvme0n1p3 to minimum size:

    ~ # e2fsck -f /dev/nvme0n1p3
    e2fsck 1.43-WIP (15-Mar-2016)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/nvme0n1p3: 226904/28950528 files (0.1% non-contiguous),
    3497825/115802112 blocks
    ~ # resize2fs -p /dev/nvme0n1p3 4000000
    resize2fs 1.43-WIP (15-Mar-2016)
    Resizing the filesystem on /dev/nvme0n1p3 to 4000000 (4k) blocks.
    Begin pass 2 (max = 672429)
    Relocating blocks
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Begin pass 3 (max = 3534)
    Scanning inode table
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Begin pass 4 (max = 23529)
    Updating inode references
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    The filesystem on /dev/nvme0n1p3 is now 4000000 (4k) blocks long.
    
  9. Resize the partition in the partition table:

    ~ # fdisk /dev/nvme0n1
    
    
    Welcome to fdisk (util-linux 2.28).
    Changes will remain in memory only, until you decide to write
    them.
    Be careful before using the write command.
    
    
    Command (m for help): d
    Partition number (1-4, default 4): 3
    
    
    Partition 3 has been deleted.
    
    
    Command (m for help): n
    Partition number (3,5-128, default 3):
    First sector (7317504-1000215182, default 7317504):
    Last sector, +sectors or +size{K,M,G,T,P} (7317504-933734399,
    default 933734399): +32G
    
    
    Created a new partition 3 of type 'Linux filesystem' and of size
    32 GiB.
    
    
    Command (m for help): p
    Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6F4D25D6-8E9A-4642-91F6-8B9123AE66AB
    
    
    Device             Start        End  Sectors  Size Type
    /dev/nvme0n1p1      2048    1026047  1024000  500M EFI System
    /dev/nvme0n1p2   1026048    7317503  6291456    3G Microsoft basic data
    /dev/nvme0n1p3   7317504   74426367 67108864   32G Linux filesystem
    /dev/nvme0n1p4 933734400 1000214527 66480128 31.7G Linux swap
    
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
  10. Resize /dev/nvme0n1p3 to fill the whole partition:

    ~ # e2fsck -f /dev/nvme0n1p3
    e2fsck 1.43-WIP (15-Mar-2016)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/nvme0n1p3: 226904/1007616 files (0.3% non-contiguous),
    1736567/4000000 blocks
    ~ # resize2fs -p /dev/nvme0n1p3
    resize2fs 1.43-WIP (15-Mar-2016)
    Resizing the filesystem on /dev/nvme0n1p3 to 8388608 (4k) blocks.
    The filesystem on /dev/nvme0n1p3 is now 8388608 (4k) blocks long.
    
  11. Mount /dev/nvme0n1p3 and have a quick check to ensure all is OK:

    ~ # mount -oro /dev/nvme0n1p3 /mnt/
    ~ # ls /mnt/
    bin         etc         lib32       mnt         run         tmp
    boot        home        lib64       opt         sbin        usr
    cdrom       initrd.img  lost+found  proc        srv         var
    dev         lib         media       root        sys
    vmlinuz
    ~ # df /mnt/ -h
    Filesystem                Size      Used Available Use% Mounted on
    /dev/nvme0n1p3           31.4G      6.3G     23.5G  21% /mnt
    ~ # umount /mnt/    
    
  12. Remove the current swap partition and create a new one:

    ~ # fdisk /dev/nvme0n1
    
    
    Welcome to fdisk (util-linux 2.28).
    Changes will remain in memory only, until you decide to write
    them.
    Be careful before using the write command.
    
    
    Command (m for help): d
    Partition number (1-4, default 4): 4
    
    
    Partition 4 has been deleted.
    
    
    Command (m for help): n
    Partition number (4-128, default 4):
    First sector (74426368-1000215182, default 74426368):
    Last sector, +sectors or +size{K,M,G,T,P} (74426368-1000215182,
    default 1000215182): +8G
    
    
    Created a new partition 4 of type 'Linux filesystem' and of size 8
    GiB.
    
    
    Command (m for help): t
    Partition number (1-4, default 4): 4
    Hex code (type L to list all codes): 19
    
    
    Changed type of partition 'Linux filesystem' to 'Linux swap'.
    
    
    Command (m for help): p
    Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: gpt
    Disk identifier: 6F4D25D6-8E9A-4642-91F6-8B9123AE66AB
    
    
    Device            Start      End  Sectors  Size Type
    /dev/nvme0n1p1     2048  1026047  1024000  500M EFI System
    /dev/nvme0n1p2  1026048  7317503  6291456    3G Microsoft basic
    data
    /dev/nvme0n1p3  7317504 74426367 67108864   32G Linux filesystem
    /dev/nvme0n1p4 74426368 91203583 16777216    8G Linux swap
    
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
    
    
    ~ # mkswap /dev/nvme0n1p4
    Setting up swapspace version 1, size = 8589930496 bytes
    UUID=ffe6618f-66cd-4f1f-ac24-3463b18aae40
    

    Remember the UUID, you'll want it later.

  13. Back on the laptop select "Abort the installation" and reboot into Ubuntu. I had some graphical oddities at this stage; wait until the login screen displays correctly.
  14. Log in to the Ubuntu desktop and update the UUID of the swap device in /etc/fstab .
  15. Restart Ubuntu and ensure it mounts its swap OK.

(To Be Continued...)

Installation

  1. Repeat the above boot instructions to boot the install USB again.
  2. I wish to install without systemd, so following the instructions on wiki.debian.org I will postpend:

    preseed/late_command="in-target apt-get install -y sysvinit-core"
    

    to my grub command line.

  3. This time you'll want to load crypto-dm-modules if you want to do encrypted filesystems.
  4. Continue with the standard installation path:
    • Set up users and passwords
    • Configure the clock
    • Detect disks
  5. Partition disks:

    • This is what I have before starting:

      /dev/nvme0n1 - 512.1 GB Unknown

              1.0 MB        FREE SPACE                    
      #1    524.3 MB  B     fat32       EFI system p      
      #2      3.2 GB        fat32       Basic data p      
      #3     34.4 GB        ext4                          
      #4      8.6 GB     F  swap                      swap
            465.4 GB        FREE SPACE                    
      
    • Set the swap space to "do not use"

    • I'm setting #3 (the ubuntu partition) to mount on /mnt/danae
    • Add a partition for /boot - I'm giving this 4GB
    • Add a partition for "physical volume for encryption". I'm filling the rest of the disk with it.
    • Configure encrypted volumes
    • Set the encrypted volume as "physical volume for LVM"
    • Configure the Logical Volume Manager
      • Create volume group
      • Create whatever lvs you want
    • Add whatever partitions you want
    • My final setup looks like:

      Encrypted volume (nvme0n1p6_crypt) - 461.4 GB Linux device-mapper

      #1    461.4 GB     K  lvm                                   
      

      LVM VG vg-nvme, LV game-base - 9.0 GB Linux device-mapper (linear #1 9.0 GB
      LVM VG vg-nvme, LV home - 160.0 GB Linux device-mapper (linear)
      #1 160.0 GB f ext4 /home
      LVM VG vg-nvme, LV slash - 4.0 GB Linux device-mapper (linear)
      #1 4.0 GB f ext4 /
      LVM VG vg-nvme, LV swap - 40.0 GB Linux device-mapper (linear)
      #1 40.0 GB f swap swap
      LVM VG vg-nvme, LV usr - 16.0 GB Linux device-mapper (linear)
      #1 16.0 GB f ext4 /usr
      LVM VG vg-nvme, LV var - 16.0 GB Linux device-mapper (linear)
      #1 16.0 GB f ext4 /var
      /dev/nvme0n1 - 512.1 GB Unknown
      1.0 MB FREE SPACE
      #1 524.3 MB B fat32 EFI system p
      #2 3.2 GB fat32 Basic data p
      #3 34.4 GB K ext4 /mnt/danae
      #4 8.6 GB swap
      #5 4.0 GB F ext4 boot /boot
      #6 461.4 GB K crypto (nvme0n1p6_ 335.4 kB FREE SPACE

    • Finish partitioning and write changes to disk

  6. Install the base system
    • linux-image-amd64
    • Targeted initrd
  7. Configure the package manager
  8. Select and install software. I'm going for:

    [*] Debian desktop environment
    [ ] ... GNOME                 
    [ ] ... Xfce                  
    [ ] ... KDE                   
    [ ] ... Cinnamon              
    [ ] ... MATE                  
    [ ] ... LXDE                  
    [*] web server                
    [*] print server              
    [*] SSH server                
    [*] standard system utilities 
    [ ] Debian Pure Blends        
    [ ] ... Debian Astro          
    [ ] ... Debian Edu            
    [ ] ... Debian EzGo           
    [ ] ... Debian Games          
    [ ] ... Debian GIS            
    [ ] ... Hamradio              
    [ ] ... Debian Junior         
    [ ] ... Debian Med            
    [ ] ... DebianMultimedia      
    [ ] ... Debian Science        
    [ ] ... DebiChem              
    
  9. Wait around for a while. Don't do what I did and let the laptop run out of battery. This took about 15 minutes for me.

  10. Install the GRUB boot loader on a hard disk.
  11. Finish the installation.
  12. The system will reboot. All being well debian should be the top of the EFI boot order and Debian's grub should therefore start up.
  13. Unfortunately something in the installation process went wrong for me and I never got a grub.cfg installed only a grub.cfg.new. This can be booted from with:

    normal (hd0,gpt5)/grub/grub.cfg.new
    
  14. Hopefully you should now have a shiny new Debian login prompt. Oddly this appears to be on VC1. To fix the grub problem log in as root and then update-grub.

After Installation

udev

  • The default install has a number of annoying udev rules that rename your network interfaces to crazy unique things.

    These rules can be overriden by adding new rules files in /etc/udev/rules.d . I have created empty files called

    73-usb-net-by-mac.rules
    75-net-description.rules
    

    You might also want 99-systemd.rules if you're keeping systemd.

systemd

  • The system installs with still far too much systemd for my liking. Imma purge it all. This will also remove gdm3 and gnome so have xdm and a window manager ready. Doing this while using the X server appears to put the system in a not very consistent state so I'd recommend rebooting after.
  • Also after removing systemd you'll lose network-manager and will have to set up some other way of configuring your wireless card.

mouse

  • psmouse and synaptics don't play nice together.

    blacklist psmouse
    

    in /etc/modprobe.d/modprobe.conf will stop the system loading psmouse.

  • By default synaptics ignores taps, and treats
    • single finger clicks as left
    • double finger clicks as right
    • triple finger clicks as middle
    • clicks in the bottom right as right
    • double finger drags as scrollwheel
  • If you want to use an external USB mouse note that the default setup doesn't do Emulate3Buttons

  1. The list of files that iwlwifi complains are missing are 20, 19, 18, 17, 16, 15, 14, and 13.ucode but the ones from the ubuntu image appear to be sufficient. ↩

  2. The list of files that iwlwifi complains are missing are 20, 19, 18, 17, 16, 15, 14, and 13.ucode but the ones from the ubuntu image appear to be sufficient. ↩

Posted at lunch time on Wednesday, June 8th, 2016 Tags:

One thing that's been noted about this election is the unusual disparity in ranges of numbers of votes required to secure seats between parties. To some extent this is because the SNP had a "roaring" good election and won 56 out of 59 seats that they contested (giving them very little chance to "waste" votes). On the other side UKIP contested an awful lot of seats for very little effect; but here I present this figures in a very slightly easier to read form. Maybe later I'll produce an infographic.

For reasons the Speaker, if seeking reelection as Speaker, is traditionally regarded as neutral and not contested (in fact both UKIP and Green did contest his seat); so I'm taking my base unit as the number of votes required to elect one John Bercow - 34,617. For each of the parties who won at least one seat, how many Bercows did it take to elect each MP on average? These figures have been slightly rounded for presentation

Party Bercows
Speaker 1
Conservative 1
DUP
Green Party 33⅖
Labour 1⅙
Liberal Democrat
Plaid Cymru
SDLP 1
SNP ¾
Sinn Fein
UKIP 112⅛
UUP 1⅔

In addition the Alliance Party got 1¾ Bercows and no seat, and the TUSC got just over 1 Bercow and no seat. Other candidates between them got 6¼ Bercows without any seats.

Posted late Friday evening, May 8th, 2015 Tags:

Being a list of Hugo Nominees who've distanced themselves from the puppies

(This post will probably get updated as and when)

One example that only distances himself from the Rabid Puppies, not the Sad ones:

Posted late Tuesday morning, April 14th, 2015 Tags:

Mini Metro is coming along; they're up to beta 20 now; with new features like "Rush Hour Mode" (where you can't move lines and trains around once placed) which I really like. It's somewhat harder and produces odder-looking maps though:

Mini Metro London Map

Posted at teatime on Friday, April 10th, 2015 Tags:

I've finally won a game of Crusader Kings II. That is got to 1453 without either losing or giving up because I've been reduced to a single boring county somewhere.

I started off as Dublin (possibly the easiest independent county in 1066) and ended up as this (Irish) Empire of Alba (total score 167024, which I note purely for my future reference):

CK2 Map

Sadly Norway took the duchy of Orkney back by getting the Duke of it elected king near the end of the game and there's a couple of enclaves in Hispania. Also it annoys me that when I create the the Empire level title my nice green Ireland colour becomes an ugly red.

I suspect if I ever get EU4 this will make a very OP starting position. Or I'd guess Lithuania or Pisa might make a playable start other than Alba.

Having won as a "normal" Catholic monarch, my next go is going to be trying as a Norse Republic (I've hand edited a Year 867 start to add this, based in Iceland...)

Posted at teatime on Wednesday, October 15th, 2014 Tags:

Solo went to the vet again this morning, and was showing no negative signs; then about two hours ago she vomited up a bolus containing most or all of the string. So hopefully everything is now well; although she's finally feeling a bit sorry for herself.

Posted Tuesday afternoon, October 14th, 2014 Tags:

I spotted Mini Metro on the Humble Bundle yesterday and in a fit of trying to reduce stress tried playing it last night.

It clearly needs some work (and documentation) but it's a fun distraction right now. So far this is the best I've managed which scored 2470 passengers delivered:

Mini Metro London Map

Posted Tuesday afternoon, October 14th, 2014 Tags:

We had to take Solo to the vet this morning :-(.

Last night, at about 7pm, she ate a piece of string about 2’ long. String is bad inside cats (and other pets!) because they can't digest it and it can make hoops and hooks that get caught on the insides and cause all kinds of pain and doom.

Fortunately the vet said that Solo is OK so far; but we have to keep her seperated from the other cats, with her own litterbox, so we can check if the string has come out; and phone them up if there are any of various kinds of distress. And we have another appointment to get her prodded again tomorrow morning.

If we'd thought to phone the emergency vet line then they might have been able to get her to vomit the string up; if we'd got her to them within about an hour; but we didn't do that sadly.

All the cats are quite distressed by the separation.

Posted late Monday morning, October 13th, 2014 Tags:

According to the BBC I'm in Saudi Arabia today...

BBC Weather App Screenshot

Also, is that a "smartquote" inspired mistake there, Auntie?

Posted early Friday morning, October 10th, 2014 Tags:

I was looking forward to going on a steam train day trip on Sunday, to celebrate getting olderer (it happens every year, tedious isn't it); but I've had notification that it has been postponed because rail engineering work near Ipswich has overrun so Network Rail can't allocate it the required paths.

Sigh.

Oh well, hopefully it'll be fun when it does eventually happen.

Posted mid-morning Wednesday, October 8th, 2014 Tags:

This blog is powered by ikiwiki.