nginx
tcp/80
Open service 46.23.81.157:80 · pranaysashank.com
2026-01-10 10:48
HTTP/1.1 302 Moved Temporarily Server: nginx Date: Sat, 10 Jan 2026 10:48:43 GMT Content-Type: text/html Content-Length: 138 Connection: close Location: https://pranaysashank.com/ Page title: 302 Found <html> <head><title>302 Found</title></head> <body> <center><h1>302 Found</h1></center> <hr><center>nginx</center> </body> </html>
Open service 46.23.81.157:443 · pranaysashank.com
2026-01-10 10:48
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Request-Methods: GET, HEAD, OPTIONS
Content-Length: 7241
Content-Security-Policy: default-src 'self' data: blob:; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; worker-src 'self' 'unsafe-eval' 'unsafe-inline' data: blob:; frame-src https:; img-src data: https:; media-src https:; object-src 'none'; sandbox allow-downloads allow-forms allow-modals allow-pointer-lock allow-popups allow-presentation allow-same-origin allow-scripts;
Content-Type: text/html; charset=utf-8
Last-Modified: Sun, 31 Aug 2025 15:15:31 GMT
Vary: Accept-Encoding
Date: Sat, 10 Jan 2026 10:48:43 GMT
Connection: close
Page title: Pranay Sashank's blog
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pranay Sashank's blog</title>
<style>
/* https://bestmotherfucking.website/ */
@media (prefers-color-scheme: dark){
body {color:#fff;background:#000}
a:link {color:#9cf}
a:hover, a:visited:hover {color:#cef}
a:visited {color:#c9f}
}
body{
margin:1em auto;
max-width:40em;
padding:0 .62em;
font:1.2em/1.62 sans-serif;
}
h1,h2,h3 {
line-height:1.2;
}
@media print{
body{
max-width:none
}
}
</style>
</head>
<main>
<h2>Pranay Sashank's blog</h2>
<p>This is my personal website.</p>
<h3>Contact</h3>
<address>
<p>You can contact me via email at:
<a href="mailto:ps@pranaysashank.com">ps@pranaysashank.com</a>
</p>
</address>
<article>
<section>
<h3>Emulating aarch64 on x86_64 with qemu</h3>
<p>This is what I had to do to get a aarch64 emulation on
my x86 laptop.</p>
</section>
<section>
<p>
The simplest way if you're running NixOS is setting <pre><code>binfmt.emulatedSystems = ["aarch64-linux"];</code></pre>
in your configuration and running the build with <pre><code>pkgs = import nixpkgs { system = "aarch64-linux"; }</code></pre>
</p>
<h4>## Spawning a container with systemd-nspawn</h4>
<h5>### Getting debian linux distro</h6>
<pre>
<code>
$ qemu-img create aarch64-debian.img 128G
$ mkfs.ext4 aarch64-debian.img
$ mkdir mount-point.dir
$ sudo mount -o loop aarch64-debian.img mount-point.dir
$ sudo debootstrap --include=systemd-container --arch arm64 bookworm mount-point.dir
</code>
</pre>
<h5>### Spawning the container</h6>
<p>On host, set binfmt entry for aarch64-linux. On NixOS,
the interpreter path is always in
/run/binfmt/{aarch64-linux}. Download qemu-aarch64-static
from <a href="https://github.com/multiarch/qemu-user-static/releases">here</a>.
And copy it to the path that is reported on the host in
the container.
</p><pre>
<code>
$ cat /proc/sys/fs/binfmt_misc/aarch64-linux
enabled
interpreter /run/binfmt/aarch64-linux
flags: P
offset 0
magic 7f454c460201010000000000000000000200b700
mask ffffffffffffff00ffffffffffff00fffeffffff
</code>
</pre>
<p>systemd-nspawn mounts filesystems /dev/, /run/ and
similar when container starts and are destroyed when
container exits. So I can't just copy the downloaded qemu
interpreter to /run. Instead I copy it to /bin in the
distro and copy it /run when container is started.</p>
<pre>
<code>
$ cp ~/Downloads/qemu-aarch64-static ~/mount-point.dir/bin/
$ chmod 755 ~/mount-point.dir/bin/qemu-aarch64-static # can't login as any other user in the container without this
</code>
</pre>
<p>Update: You can instead create a symlink in a directory on host
and mount it on to the container with <code>--bind=binfmt:/run/binfmt/</code></p>
<pre>
<code>
$ mkdir binfmt; cd binfmt
$ ln -s /bin/qemu-aarch64-static aarch64-linux
</code>
</pre>
<p>Here, I am not sure how binfmt registries work across
host and container, I don't see a binfmt entry in
container's /proc/sys/fs/binfmt_misc though the
documentation for nspawn says it limits access to /proc/sys
as read only. However only when the qemu interpreter is
present at the path set in the binfmt entry inside the
container does it work. So this is what I am doing right now.<p>
<pre>
<code>
$ sudo systemd-nspawn -D mount-point.dir -U --bind=binfmt:/run/binfmt/ --machine de