Setup Docker build area

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
FROM base/archlinux

RUN pacman -Sy && \
    pacman -S go \
    sudo \
    vim \
    ca-certificates \
    libcap \
    git --noconfirm

RUN useradd -m -G wheel -s /bin/bash build && \
    echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

USER build
CMD ["/bin/bash"]

Build and run…

1
2
docker build -t uroot .
docker run --rm -it --name uroot -v <somefolder>:/home/build

We’ll assume that in you’ve pulled the built image of dnscrypt-proxy from https://github.com/jedisct1/dnscrypt-proxy/releases Now install u-root

1
2
go get github.com/u-root/u-root
cd go/bin

Then run a script that looks like this:

1
2
3
4
5
6
./u-root -build=bb \
	-files "$HOME/dnscrypt-proxy/dnscrypt-proxy:inito" \
	-files "$HOME/dnscrypt-proxy/dnscrypt-proxy.toml:dnscrypt-proxy.toml" \
	-files "$HOME/dnscrypt-proxy/public-resolvers.md:public-resolvers.md" \
	-files "$HOME/dnscrypt-proxy/public-resolvers.md.minisig:public-resolvers.md.minisig" \
	-files "/etc/ca-certificates/extracted/tls-ca-bundle.pem:etc/ssl/certs/ca-certicates.crt" 

NOTES: dnscrypt-proxy makes https calls, so it needs access to ca-certificates in a well known path. NOTES: cheating here by copying it all into root folder, and renaming the binary ‘inito’ so it’s automatically run -could be neater

Those commands generate a file initramfs.linux_amd64.cpio in /tmp (you can redirect that to some other file).
To run in xen, grab your kernel from /boot, and create a xen config file - this is for an Alpine PV host… vi uroot.cfg

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# Kernel paths for install
kernel = "<blah>/uroot/vmlinuz-virthardened"
ramdisk = "<blah>/uroot/initramfs.linux_amd64.cpio"
extra="modules=loop,squashfs console=hvc0 ip=dhcp"

# Network configuration
vif = ['bridge=xenbr0']

# DomU settings
memory = 128
name = "uroot-a1"
vcpus = 1
maxvcpus = 1

Then run with

1
sudo xl create -f ./uroot.cfg -c