Oops report: Moving from i386 to amd64 on my server
Posted: - Modified: | geek, linux I was trying to install Docker on my Linode virtual private server so that I could experiment with containers. I had a problem with the error “no supported platform found in manifest list.” Eventually, I realized that dpkg --print-architecture
showed that my Ubuntu package architecture was i386 even though my server was 64-bit. That was probably due to upgrading in-place through the years, starting with a 32-bit version of Ubuntu 10.
I tried dpkg --add-architecture amd64
, which let me install the docker-ce
package from the Docker repository. Unfortunately, I didn't review it carefully enough (the perils of SSHing from my cellphone), and installing that removed a bunch of other i386 packages like sudo, ssh, and screen. Ooops!
Even though we've been working on weaning lately, I decided that letting A- nurse a long time in her sleep might give me a little time to try to fix things. I used Linode's web-based console to try to log in. I forgot the root password, so I used their tool for resetting the root password. After I got that sorted out, though, I found that I couldn't resolve network resources. I'd broken the system badly enough that I needed to use another rescue tool to mount my drives, chroot to them, and install stuff from there. I was still getting stuck. I needed more focused time.
Fortunately, I'd broken my server during the weekend, so W- was around to take care of A- while I tried to figure things out. I had enough free space to create another root partition and install Ubuntu 16, which was a straightforward process with Linode's Deploy Image tool.
I spent a few hours trying to figure out if I could set everything up in Docker containers from the start. I got the databases working, but I kept getting stymied by annoying WordPress redirection issues even after setting home
and siteurl
in the database and defining them in my config file. I tried adding Nginx reverse proxying to the mix, and it got even more tangled.
Eventually, I gave up and went back to running the services directly on my server. Because I did the new install in a separate volume, it was easy to mount the old volume and copy or symlink my configuration files.
Just in case I need to do this again, here are the packages that apt
says I installed:
- General:
- screen
- apt-transport-https
- ca-certificates
- curl
- dirmngr
- gnupg
- software-properties-common
- borgbackup
- For the blog:
- mysql-server
- php-fpm
- php-mysql
- php-xml
- For Quantified Awesome:
- ruby-bundler
- ruby-dev
- For experimenting:
- docker-compose
- For compiling Emacs:
- make
- gcc
- g++
- zlib1g-dev
- libmysqlclient-dev
- autoconf
- texinfo
- gnutls-dev
- ncurses-dev
- From external repositories:
I got the list by running:
zgrep 'Commandline: apt' /var/log/apt/history.log /var/log/apt/history.log.*.gz
I saved my selections with dpkg --get-selections
so that I can load them with dpkg --set-selections << ...; apt-get dselect-upgrade
if I need to do this again.
Symbolic links to old volume:
- /var/www
- /usr/local
- /home/sacha
- /var/lib/mysql (after installing)
Copied after installing – I'll probably want to tidy this up:
- /etc/nginx/sites-available
- /etc/nginx/sites-enabled
Lessons learned:
- Actually check the list of packages to remove.
- Consider fresh installs for major upgrades.
When things settle down, I should probably look into organizing one of the volumes as a proper data volume so that I can cleanly reinstall the root partition whenever I want to.
I also want to explore Docker again – maybe once I've wrapped my mind around how Docker, Nginx, WordPress, Passenger, virtual hosts, and subdirectories all fit together. Still, I'm glad I got my site up and running again!