# Adjusting APT Sources for Multiarch

The Cuttlefish host Debian packages can also be built and used on an `arm64`
based system. However, because certain parts of it are still `amd64`, the
APT sources of the system need to be adjusted for multiarch so that package
dependencies can be correctly looked up and installed.

For detailed context, see [Multiarch HOWTO](https://wiki.debian.org/Multiarch/HOWTO), and this document will use Ubuntu 21.04 (Hirsute) as an example for
making such adjustments.

The basic idea is to first limit the existing APT sources to `arm64` only,
so that when a new architecture like `amd64` is added, APT won't try to
fetch packages for the new architecture from the existing repository, as
`arm64` packages are in "ports", while `amd64` ones are in the main
repository. So a line in `/etc/apt/sources.list` such as:

```
deb http://ports.ubuntu.com/ubuntu-ports hirsute main restricted
```

would be changed to:

```
deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports hirsute main restricted
```

Next, each line of config like the above will be duplicated and modified into
an entry that corresponds to what's in the main repository, with its
architecture limited to `amd64`. For example, for the same line as shown above,
a new entry will be added like this:

```
deb [arch=amd64] http://archive.ubuntu.com/ubuntu hirsute main restricted
```

The script below might be handy for this task:
```bash
#!/bin/bash
cp /etc/apt/sources.list ~/sources.list.bak
(
  (grep ^deb /etc/apt/sources.list | sed 's/deb /deb [arch=arm64] /') && \
  (grep ^deb /etc/apt/sources.list | sed 's/deb /deb [arch=amd64] /g; s/ports\.ubuntu/archive.ubuntu/g; s/ubuntu-ports/ubuntu/g') \
) | tee /tmp/sources.list
mv /tmp/sources.list /etc/apt/sources.list
```
**Note:** please run the above script as `root`, and adjust for differences in
Ubuntu releases or location prefixed repositories for faster download (e.g.
`us.archive.ubuntu.com` instead of `archive.ubuntu.com`).

Finally, add the new architecture and do an APT update with:
```bash
sudo dpkg --add-architecture amd64
sudo apt update
```
Make sure there's no errors or warnings in the output of `apt update`. To
restore the previous APT sources list, use the backup file `sources.list.bak`
saved by the script in your home directory.