2023-10-22
This commit is contained in:
parent
1606eecc90
commit
0dd012051d
@ -1929,6 +1929,309 @@ If I don't, escalate the issue to the host of this site (this can also be found
|
||||
</HTML>
|
||||
|
||||
|
||||
/blah/2023-10-22.html
|
||||
|
||||
: more adventures trying to run a .exe file
|
||||
|
||||
So long as you can get QEMU.
|
||||
qEMU?
|
||||
qEmu?
|
||||
QEMU according to its website.
|
||||
|
||||
I grabbed the RAR file of this Windows game and now I desperately want to run
|
||||
it because it looks really cool. Now that I figured out unRARing it's time to
|
||||
play it. However WINE (an API conversion layer from Win32 to Linux+other OSes)
|
||||
won't work on the Raspberry Pi because this is an ARM processor which can't
|
||||
execute x86 code, even if the API calls are translated. So I've decided this
|
||||
game warrants mucking around in a lot of complicated compatibility shims.
|
||||
|
||||
The stack will look something like this:
|
||||
|
||||
__ Raspberry Pi 4B+ 8GB _______________________________
|
||||
| |
|
||||
| __ Linux __________________________________________ | ; I'm including the
|
||||
| | | | ; kernel as its own
|
||||
| | Chimera | | ; layer-maker
|
||||
| | __ X11 server _________________________________ | | ; because QEMU will
|
||||
| | | | | | ; be booting the
|
||||
| | | WINE display<---------------------------------------. ; kernel image
|
||||
| | | __ urxvt __________________________________ | | | | ; itself without a
|
||||
| | | | | | | | | ; bootloader and
|
||||
| | | | __ QEMU amd64 _________________________ | | | | | ; from the kernel
|
||||
| | | | | | | | | | | ; init etc will be
|
||||
| | | | | __ Linux __________________________ | | | | | | ; spawned. The
|
||||
| | | | | | | | | | | | | ; Raspberry Pi also
|
||||
| | | | | | Alpine | | | | | | | ; basically just
|
||||
| | | | | | __ WINE _______________________ | | | | | | | ; boots the kernel
|
||||
| | | | | | | ^-(X11 client)--------------------------' ; image sans loader
|
||||
| | | | | | | | | | | | | | ; because U-Boot.
|
||||
| | | | | | | The Coffin of Andy and Leyley | | | | | | | ; The details
|
||||
| | | | | | | | | | | | | | ; mentioned are the
|
||||
| | | | | | |_______________________________| | | | | | | ; ones I expect to
|
||||
| | | | | | | | | | | | ; add non-trivial
|
||||
| | | | | |___________________________________| | | | | | ; overhead to
|
||||
| | | | | | | | | | ; processor load,
|
||||
| | | | |_______________________________________| | | | | ; which might be a
|
||||
| | | | | | | | ; problem in
|
||||
| | | |___________________________________________| | | | ; practice.
|
||||
| | | | | |
|
||||
| | |_______________________________________________| | |
|
||||
| | | |
|
||||
| |___________________________________________________| |
|
||||
| |
|
||||
|_______________________________________________________|
|
||||
|
||||
This seems fine!
|
||||
|
||||
I had sex four times tonight and this is what I'm doing with the clarity.
|
||||
|
||||
So the first order of business is QEMU. This is packaged for Chimera in
|
||||
multiple variants. I don't know what I'm doing so I looked it up and I think I
|
||||
need qemu-system-* because I'm emulating the processor as well as the software.
|
||||
# apk add qemu-system-x86_64
|
||||
|
||||
Now I need Alpine. I think it comes in really small images for containers.
|
||||
$ curl -O https://dl-cdn.alpinelinux.org/alpine/v3.18/releases/x86_64/\
|
||||
alpine-virt-3.18.4-x86_64.iso
|
||||
|
||||
Let's try booting.
|
||||
$ qemu-system-x86_64 -cdrom alpine-virt-3.18.4-x86_64.iso
|
||||
Error relocating /lib/libspice-server.so.1: __aarch64_ldadd4_acq_rel: symbol no
|
||||
Error relocating /lib/libspice-server.so.1: __aarch64_ldset4_acq_rel: symbol no
|
||||
Error relocating /lib/libspice-server.so.1: __aarch64_ldclr4_acq_rel: symbol no
|
||||
Error relocating /lib/libspice-server.so.1: __aarch64_cas4_acq_rel: symbol not
|
||||
|
||||
Hm. Same thing as root. Maybe I need a kernel image outside of the ISO? Let me
|
||||
try something:
|
||||
$ curl -O https://dl-cdn.alpinelinux.org/alpine/v3.18/releases/x86_64/\
|
||||
alpine-minirootfs-3.18.4-x86_64.tar.gz
|
||||
$ tar tf alpine-minirootfs-3.18.4-x86_64.tar.gz | head
|
||||
./
|
||||
./sys/
|
||||
./srv/
|
||||
./run/
|
||||
./root/
|
||||
./opt/
|
||||
./mnt/
|
||||
./media/
|
||||
./media/usb/
|
||||
./media/floppy/
|
||||
$ mkdir amd64
|
||||
$ <alpine-minirootfs-3.18.4-x86_64.tar.gz gzip -cd | tar x -C amd64
|
||||
$ man -k qemu
|
||||
qemu(1) - QEMU User Documentation
|
||||
qemu-img(1) - QEMU disk image utility
|
||||
qemu-storage-daemon(1) - QEMU storage daemon
|
||||
virtfs-proxy-helper(1) - QEMU 9p virtfs proxy filesystem helper
|
||||
qemu-block-drivers(7) - QEMU block drivers reference
|
||||
qemu-cpu-models(7) - QEMU CPU Models
|
||||
qemu-ga-ref(7) - QEMU Guest Agent Protocol Reference Contents 0.0 • 2 QEMU Gu
|
||||
qemu-qmp-ref(7) - QEMU QMP Reference Manual Contents 0.0 • 2 QEMU QMP Referen
|
||||
qemu-storage-daemon-qmp-ref(7) - QEMU Storage Daemon QMP Reference Manual Con
|
||||
qemu-ga(8) - QEMU Guest Agent
|
||||
qemu-nbd(8) - QEMU Disk Network Block Device Server
|
||||
$ man qemu # brb...
|
||||
$ ls amd64 | grep linux
|
||||
$ # fuck... I'm just gonna look up a tutorial
|
||||
|
||||
The good news is I don't think X forwarding will be necessary so that saves a
|
||||
lot of trouble. The bad news is I don't know what I'm doing and am tired so
|
||||
this will wait for tomorrow.
|
||||
|
||||
https://git.sr.ht/~sircmpwn/builds.sr.ht/tree/master/item/images/alpine/genimg
|
||||
How does Drew do it?
|
||||
|
||||
It was at this point the file got corrupted so here's my reconstruction of this
|
||||
section based on the nvim swapfile:
|
||||
|
||||
I return well rested, ten hours later.
|
||||
# apk add qemu-img
|
||||
|
||||
[ 1:20 AM] trinity: trying to figure out qemu
|
||||
[ 1:20 AM] trinity: not going well
|
||||
[ 1:21 AM] trinity: trying again with the sun up
|
||||
[ 1:21 AM] [...]: I remember I used that for the class where we
|
||||
re-implemented a lobotomized risc-v operating system
|
||||
[ 1:22 AM] trinity: i just wanna play this rpgmaker game
|
||||
[ 1:24 AM] [...]: which one?
|
||||
[ 1:29 AM] trinity: coffin of andy and leyley
|
||||
[ 1:29 AM] trinity: i think i can figure this out tomorrow
|
||||
[ 1:29 AM] trinity: \/when i wake up
|
||||
[ 1:29 AM] [...]: why do you need qemu to run a rpgmaker game?
|
||||
[ 1:30 AM] [...]: they run in wine
|
||||
[ 1:30 AM] [...]: someone must have built some wrapper for them if
|
||||
wine/proton does not work
|
||||
[ 1:30 AM] [...]: you just need the fonts
|
||||
[ 1:31 AM] [...]: also I remember running touhou mother in easyrpg on my
|
||||
steam deck
|
||||
[ 1:31 AM] trinity: not on arm64
|
||||
[ 1:31 AM] [...]: oh i see
|
||||
[ 1:32 AM] [...]: WHYYYYYYYY
|
||||
[ 1:32 AM] [...]: WHY HAS THIS SPREAD SO FAR
|
||||
[ 1:32 AM] [...]: is that the incest canibalism one?
|
||||
[ 1:33 AM] [...]: no comment
|
||||
[ 1:33 AM] [...]: :3
|
||||
|
||||
Drew bootstraps an extremely minimal Alpine x86_64 image with just enough
|
||||
packages to self-host. However in the genimg script there is this one line:
|
||||
30 dd if=/usr/share/syslinux/mbr.bin of=/dev/nbd0 bs=1 count=440
|
||||
which relies on there being an existing SYSLINUX installation on the host. This
|
||||
won't work on ARM64 for which there is no SYSLINUX and Chimera doesn't have a
|
||||
GCC x86_64 cross compiler packaged and I don't wanna have to compile gcc for
|
||||
this so I'm just gonna find a way that's different from Drew's way.
|
||||
|
||||
I'm gonna try using the standard ISO now because that should have a kernel and
|
||||
means to boot on x86_64 already. I wonder if I can boot it as a live system and
|
||||
no shit it has no X server. Maybe it wouldn't be too bad to install?
|
||||
|
||||
Fuck this shit. I'm just gonna figure out Box86.
|
||||
|
||||
Actually Box64 because I don't wanna figure out armhf stuff today.
|
||||
|
||||
; doas gmake
|
||||
[ 1%] Building C object CMakeFiles/interpreter.dir/src/emu/x64run.c.o
|
||||
/usr/local/src/box64/src/emu/x64run.c:1351:47: error: expected expression
|
||||
emu->segs[_ES] = *(__uint16_t*)(((char*)ED)+4);
|
||||
^
|
||||
/usr/local/src/box64/src/emu/x64run.c:1351:36: error: use of undeclared identif
|
||||
ier '__uint16_t'
|
||||
emu->segs[_ES] = *(__uint16_t*)(((char*)ED)+4);
|
||||
^
|
||||
/usr/local/src/box64/src/emu/x64run.c:1364:47: error: expected expression
|
||||
emu->segs[_DS] = *(__uint16_t*)(((char*)ED)+4);
|
||||
^
|
||||
/usr/local/src/box64/src/emu/x64run.c:1364:36: error: use of undeclared identif
|
||||
ier '__uint16_t'
|
||||
emu->segs[_DS] = *(__uint16_t*)(((char*)ED)+4);
|
||||
^
|
||||
4 errors generated.
|
||||
gmake[2]: *** [CMakeFiles/interpreter.dir/build.make:76: CMakeFiles/interpreter
|
||||
.dir/src/emu/x64run.c.o] Error 1
|
||||
gmake[1]: *** [CMakeFiles/Makefile2:113: CMakeFiles/interpreter.dir/all] Error
|
||||
2
|
||||
gmake: *** [Makefile:166: all] Error 2
|
||||
|
||||
it is all so tiresome. This also matters less because I'm gonna need Box86
|
||||
anyway. Maybe I should make a QEMU virtual machine for Raspberry Pi OS, install
|
||||
Box86 and Box86's packages on that, and then have it all nice and dandy?
|
||||
# apk add qemu-system-arm
|
||||
# apk del qemu-system-x86_64
|
||||
|
||||
End recovered segment.
|
||||
|
||||
I'm gonna use the armhf image because I don't think this EXE is 64-bit and
|
||||
it'll cut out all of the compat stuff.
|
||||
$ curl https://downloads.raspberrypi.com/raspios_armhf/images/\
|
||||
raspios_armhf-2023-10-10/2023-10-10-raspios-bookworm-armhf.img.xz \
|
||||
| xz -cd \
|
||||
>2023-10-10-raspios-bookworm-armhf.img
|
||||
1238MB... jeez... time to plug in the laptop fan
|
||||
The tutorial I'm following provided a link to a GitHub repo with a Raspberry Pi
|
||||
QEMU Linux kernel image which is awesome. Except there's no Linux 6.1 so I'm
|
||||
gonna have to go a version behind. This is all to play one video game so we can
|
||||
move fast and break things without risking all hell breaking loose.
|
||||
$ rm 2023-10-10-raspios-bookworm-armhf.img
|
||||
Except where are the old OS versions? I can't find them on the Raspberry Pi
|
||||
website.
|
||||
Found by looking up, good old no-TLS HTTP: http://downloads.raspberrypi.org/
|
||||
The newest kernel provided by the GitHub repo is 5.10.63, which corresponds
|
||||
according to the Raspberry Pi OS Full armhf release notes (raspios_full_armhf
|
||||
/release_notes.txt) to the 2021-10-30 release. But that download isn't in this
|
||||
HTTP source. I think 5.4.51, which is provided in the repo, will work with
|
||||
2020-08-24, though that version isn't mentioned in the release notes, because
|
||||
the release notes' mentioned 2020-08-20 does have that version. The issue is
|
||||
the release notes' dates don't line up with the actual downloads provided.
|
||||
Strange. Whatever. Let's just try this and hope it works.
|
||||
Oh, what the fuck? The dates in the folders are different? fucking hell
|
||||
look at this fucking URL:
|
||||
|
||||
http://downloads.raspberrypi.org/raspios_full_armhf/images/
|
||||
raspios_full_armhf-2020-08-24/ <- 2020-08-24
|
||||
2020-08-20-raspios-buster-armhf-full.info <- WTF?????
|
||||
|
||||
I'm so tired and just want to read about hot cartoon characters butchering
|
||||
people. Kernel 5.10.63! 2021-10-30! Of course, in the 2021-11-08 folder! I
|
||||
should have known!
|
||||
$ curl -O http://downloads.raspberrypi.org/raspios_full_armhf/images/\
|
||||
raspios_full_armhf-2021-11-08/2021-10-30-raspios-bullseye-armhf-full.zip
|
||||
$ # .zip? are you kidding me? 3.0GB??? This is gonna be an hour download...
|
||||
|
||||
Fucking hell. See you tomorrow.
|
||||
|
||||
|
||||
/blah/2023-10-21.html
|
||||
|
||||
: fuck unrar
|
||||
|
||||
I run Chimera Linux, an Alpine-based operating system still in its very early
|
||||
stages but stable enough that I trust it for my meager, mostly console and X11
|
||||
based workflow. It can run a C compiler, so good enough for me. The only issue
|
||||
is, despite being based on Alpine, a popular operating system not for desktop
|
||||
but for embedded environments like containers, for which a lot of software is
|
||||
packaged and available in system repositories, Chimera does not have a lot of
|
||||
packages. I'm going to package UNRAR, a non-free ("freeware") tool that has no
|
||||
dependencies aside from the C++ standard library, to get a feel for Alpine
|
||||
packaging.
|
||||
|
||||
UNRAR is an almost delightful little tool with the unfortunate, heinous problem
|
||||
of being non-free, and its license forbidding the use of the provided source
|
||||
code for reimplementation - otherwise I would just rewrite it in sane C89
|
||||
without encumbrence. But we don't need to read the source code in order to
|
||||
compile the C++.
|
||||
|
||||
The Alpine Wiki section on Creating an Alpine package says to apk add
|
||||
alpine-sdk but Chimera has no such thing so hopefully that's fine. It says to
|
||||
check out the aports tree but I don't want to put my packages upstream (dealing
|
||||
with large software projects is tiresome and I know Chimera is in a constant
|
||||
state of flux).
|
||||
|
||||
I did this:
|
||||
|
||||
# mkdir -p /var/cache/distfiles
|
||||
# chmod a+w /var/cache/distfiles
|
||||
|
||||
I now need abuild-keygen according to the wiki but it isn't installed.
|
||||
$ apk search abuild-keygen
|
||||
pulled up nothing. Nor did a package contents search. Maybe it's fine? On a
|
||||
whim I searched cbuild* in the contents search and found apk:base-cbuild-progs.
|
||||
# apk add base-cbuild-progs
|
||||
(1/1) Installing base-cbuild-progs (0.1-r2)
|
||||
OK: 2083 MiB in 896 packages
|
||||
|
||||
On the Chimera Linux website I found the Chimera-specific packaging stuff.
|
||||
There is a cports repository with Packaging.md but it's kind of long so I'll
|
||||
use it as a reference while following the less complete Alpine guide. This is
|
||||
the rat bastard approach to software but I am doing this for my own uses and
|
||||
for pleasure and I don't wanna spend five hours contributing to this project
|
||||
right now because I am tired.
|
||||
|
||||
I need newapkbuild but don't have it so I'll try to find the default template
|
||||
on-line or go off an existing thingy.
|
||||
|
||||
I found contrib/jq/template.py so I'll copy that.
|
||||
|
||||
pkgname = "unrar"
|
||||
|
||||
What's the pkgver?
|
||||
|
||||
$ cd /usr/local/src/unrar
|
||||
-sh: 5: cd: can't cd to /usr/local/src/unrar
|
||||
$ cd /usr/local/src
|
||||
$ ls
|
||||
$
|
||||
Connection to tebibyte.media closed.
|
||||
; # oops
|
||||
; cd /usr/local/src/unrar
|
||||
; cat version.hpp
|
||||
#define RARVER_MAJOR 6
|
||||
#define RARVER_MINOR 24
|
||||
#define RARVER_BETA 1
|
||||
#define RARVER_DAY 17
|
||||
#define RARVER_MONTH 9
|
||||
#define RARVER_YEAR 2023
|
||||
# apk del qemu-system-x86_64
|
||||
|
||||
|
||||
/blah/2023-10-21.html
|
||||
|
||||
: fuck unrar
|
||||
|
Loading…
Reference in New Issue
Block a user