Ongoing notes on things I did to get WSL2 to work
Tags: linux, windows, productivity
Published: 2020-07-14 11:55:45

In the interests of productivity, and many issues trying to get dev stuff to work on my Windows workstation I started to use WSL 2 (I skipped WSL 1).

This post will be used for ongoing notes of things that I had to fix during the setup. It might not be complete as I'm starting my notes after the fact but I'll do my best to remember everything.

All the fixes are actually simple, but hopefully it will still be useful to save some time for people facing the same issues.

---

# NPM/Yarn install not working

Unfortunately I don't have a log of the exact error messages from this time, but when trying to install these package managers I got an error message (something related to not being able to connect - I couldn't even ping anything external).

## The fix 🚀

DNS settings had not been configured, even pinging external sites didn't work.

1. Create a file: /etc/wsl.conf.
2. Put the following lines in the file in order to ensure the your DNS changes do not get blown away
`[network]
generateResolvConf = false`

3. In a cmd window, run `wsl --shutdown`
4. Restart WSL2
5. Create a file: `/etc/resolv.conf`. If it exists, delete and replace existing one with this new file (`sudo rm /etc/resolv.conf` to delete, and if you get a warning about an existing swap file then `D` to delete it).
6. Put the following line in the file
`nameserver 8.8.8.8` (or use your DNS server instead of 8.8.8.8 which is a Google DNS server)

3. In a cmd window, run `wsl --shutdown`
4. Restart WSL2

*Credit: this fix is copied directly from this [gist](https://gist.github.com/coltenkrauter/608cfe02319ce60facd76373249b8ca6) by @coltenkrauter*

---

# error: linker `cc` not found when compiling rust code

When running rustc I came across the following error, basically because gcc wasn't installed.

```
$ rustc fart.rs
error: linker `cc` not found
  |
  = note: No such file or directory (os error 2)

error: aborting due to previous error
```

## The fix 🚀
```
$ sudo apt update
$ sudo apt install build-essential
```

*I did actually have more errors than this which I've written up separately, see the 404 not found error below*

---

# Package installation fails with 404 errors
Annoying errors like the one below to show when I was installing some new packages (actually after trying to install build-essential).

```
$ sudo apt install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  cpp cpp-9 dpkg-dev fakeroot g++ g++-9 gcc gcc-9 gcc-9-base libalgorithm-diff-perl libalgorithm-diff-xs-perl
  libalgorithm-merge-perl libasan5 libatomic1 libc-dev-bin libc6-dev libcc1-0 libcrypt-dev libdpkg-perl libfakeroot
  libfile-fcntllock-perl libgcc-9-dev libisl22 libitm1 liblsan0 libmpc3 libquadmath0 libstdc++-9-dev libtsan0
  libubsan1 linux-libc-dev make
Suggested packages:
  cpp-doc gcc-9-locales debian-keyring g++-multilib g++-9-multilib gcc-9-doc gcc-multilib autoconf automake libtool
  flex bison gdb gcc-doc gcc-9-multilib glibc-doc bzr libstdc++-9-doc make-doc
The following NEW packages will be installed:
  build-essential cpp cpp-9 dpkg-dev fakeroot g++ g++-9 gcc gcc-9 gcc-9-base libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1 libc-dev-bin libc6-dev libcc1-0 libcrypt-dev
  libdpkg-perl libfakeroot libfile-fcntllock-perl libgcc-9-dev libisl22 libitm1 liblsan0 libmpc3 libquadmath0
  libstdc++-9-dev libtsan0 libubsan1 linux-libc-dev make
0 upgraded, 33 newly installed, 0 to remove and 33 not upgraded.
Need to get 1096 kB/35.2 MB of archives.
After this operation, 157 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Ign:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-libc-dev amd64 5.4.0-31.35
Err:1 http://security.ubuntu.com/ubuntu focal-updates/main amd64 linux-libc-dev amd64 5.4.0-31.35
  404  Not Found [IP: 91.189.88.142 80]
E: Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_5.4.0-31.35_amd64.deb  404  Not Found [IP: 91.189.88.142 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
```

The important bit:

```
Failed to fetch http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_5.4.0-31.35_amd64.deb  404  Not Found [IP: 91.189.88.142 80]
```

Running with `--fix-missing` as suggested in the error message and a few blog posts gave the same error.

`sudo apt-get update` didn't work either:

```
$ sudo apt-get update --fix-missing && apt-get install gcc
Hit:1 https://dl.yarnpkg.com/debian stable InRelease
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease
Hit:3 https://deb.nodesource.com/node_12.x focal InRelease
Get:4 http://security.ubuntu.com/ubuntu focal-security InRelease [107 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-updates InRelease [111 kB]
Get:6 http://archive.ubuntu.com/ubuntu focal-backports InRelease [98.3 kB]
Reading package lists... Done
E: Release file for http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease is not valid yet (invalid for another 10d 6h 3min 42s). Updates for this repository will not be applied.
E: Release file for http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease is not valid yet (invalid for another 10d 6h 3min 50s). Updates for this repository will not be applied.
E: Release file for http://archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease is not valid yet (invalid for another 10d 6h 4min 14s). Updates for this repository will not be applied.
```


## The fix 🚀
The issue was that my clock was out of sync with the Windows host (I don't know why).

```
$ sudo hwclock --hctosys
```

After this `$ sudo apt update` ran happily, as did `$ sudo apt install build-essential`.

*Credit: I found this solution [here](https://askubuntu.com/questions/1096930/sudo-apt-update-error-release-file-is-not-yet-valid)*

# Can't add python poetry auto completions for bash
Got the error `bash: /etc/bash_completion.d/poetry.bash-completion: Permission denied` when running the following command:
```
$ poetry completions bash > /etc/bash_completion.d/poetry.bash-completion
```

At the time of writing (10 Aug 2020), according to the output of `$ poetry help completions` this should be the command to install bash completions for poetry.

## The fix 🚀
Run this command instead!
```
$ poetry completions bash | sudo tee /etc/bash_completion.d/poetry.bash-completion
```

*Credit: I found this solution [here](https://github.com/python-poetry/poetry/issues/1017)*