-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
s390x
- Dave's Garage at 2023-10: Why Do Mainframes Still Exist? What's Inside One? 40TB, 200+ Cores, AI, and more! https://www.youtube.com/watch?v=ouAG4vXFORc
- https://en.wikipedia.org/wiki/Linux_on_IBM_Z
- FLOSS 564 Interview about Open Mainframe Project
- Open Mainframe Project
- LinuxOne Community Cloud
- S 8000 WLUG Talk - Linux on the IBM Z mainframe platform
- https://wiki.qemu.org/Documentation/Platforms/S390X
- https://arstechnica.com/information-technology/2023/07/the-ibm-mainframe-how-it-runs-and-why-it-survives/
- https://sdl-hercules-390.github.io/html/
- Big-endian s390x https://community.ibm.com/community/user/ibmz-and-linuxone/blogs/javier-perez1/2021/01/19/endianness-guidance-for-open-source-projects
- The Future of Big Iron: An Interview with IBM’s Christian Jacobi
2024-01-20 Petclinic fork https://github.com/xet7/pet , with command blink redbean.com
- With Petclinic website, it is possible to add pets, visits to clinic, etc. There is no login system, it is possible to add to database directly at website http://127.0.0.1:8000/ or http://YOUR-COMPUTER-IP-ADDRESS:8000/
- When xet7 added issue about blink segfault at s390x, 5 minutes later jart added fix https://github.com/jart/blink/issues/162
- Blink is x86_86 emulator, similar to qemu https://github.com/jart/blink . With blink, it works at Linux s390x. Without blink, it works at x86_86/arm64 Win/Mac/Linux/BSD, but ASAN security feature does not work yet at arm64, like mentioned at Makefile of https://github.com/xet7/pet . If there is errors, maybe you need to run it with
chmod +x redbean.com && sh -c ./redbean.com
, or also need to installape
from https://github.com/jart/cosmopolitan . - Redbean is webserver https://redbean.dev
- Fullmoon is Lua web framework https://github.com/pkulchenko/fullmoon . Petclinic has fork of Fullmoon, making possible to use SQLite across CGI-like Lua processes of Redbean, like mentioned at Readme https://github.com/xet7/pet
- SQLite has triggers, and it's possible to Redbean's cron like scheduled actions
- By using Makefile with
make all
ormake start
it makes one executeable. When starting, it creates SQLite database to same directory, adding data, withsrv/.lua/*.sql
- At fork https://github.com/xet7/pet , xet7 added all external
.sql
, Javascript and CSS dependencies directly inside executeable. This can be seen at Makefile, where files fromsrv
directory are are added to.zip
file, that is added to end ofredbean.com
executeable. - Releases at https://github.com/xet7/pet/releases
At Makefile, xet7 fixed make benchmark
of wrk benchmarks to to work at Mac M1 brew install wrk
and Linux sudo apt install wrk
. But wrk does not yet work at s390x, xet7 added issue about it to https://github.com/jart/blink/issues/163 . If you start with silent mode ./redbean.com -s
, then at M1 Air macOS Sonoma is this benchmark:
~/Downloads/pet$ make benchmark
wrk -H 'Accept-Encoding: gzip' -t 12 -c 120 http://127.0.0.1:8000/
Running 10s test @ http://127.0.0.1:8000/
12 threads and 120 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 73.21ms 136.41ms 1.25s 86.04%
Req/Sec 7.72k 12.48k 65.33k 89.46%
600013 requests in 10.09s, 708.40MB read
Socket errors: connect 0, read 427, write 2, timeout 0
Requests/sec: 59485.18
Transfer/sec: 70.23MB
- It is possible to show hidden files like
.gitignore
with Lua IDE, ZeroBrane Studio, this way, and also debug redbean: https://github.com/xet7/pet/wiki/Redbean
- Unrelated to Lua, there is also QuickJS (similar like Node.js/Bun/Deno), where it is possible to embed Javascript to same Cosmopolitan x86_85/arm64 Win/Mac/Linux/BSD executeable binary https://github.com/xet7/pet/wiki/QuickJS
- Works:
- TSC platform game, C++ https://secretchronicles.org/en/news/2020/11/16/tsc-for-s390x-available/
- Darkest Hour halloween text adventure game, C89, xet7 ported to 30+ CPU/OS https://github.com/xet7/darkesthour
- V https://github.com/vlang/v/issues/18737 at 2025-04-03 now works!
- Zig https://github.com/tigerbeetle/tigerbeetle/blob/main/docs/internals/HACKING.md#building
- Does not work yet:
- Bun https://github.com/oven-sh/bun/issues/2632
- Partially related, Zig works, see above https://github.com/wekan/ferretdb/tree/main/node-deno-bun#trying-to-compile-llvm-for-zig-and-bun-at-s390x-fails
- Deno, because Rust ring (a crypto dependency) does not support s390x https://github.com/denoland/deno/issues/20212
- Bun https://github.com/oven-sh/bun/issues/2632
Ported by others, not xet7:
xet7, as maintainer of WeKan, got access to mainframe at IBM LinuxOne Community Cloud. Access to those servers is monitored, it's running on a real mainframe.
Previously xet7 had ssh access. At 2023-09 xet7 got web console access, and IBM bumped quota to 2 VMs with 8 GB of memory, 200 GB disk and 4 CPUs each. At web console it is possible to create and remove VMs, and select distro like RHEL/SUSE/Ubuntu. xet7 did do-release-upgrade to upgrade newest Ubuntu 23.10.
- wekan-VERSION-s390x.zip at https://releases.wekan.team/s390x/
This Snap package https://snapcraft.io/juju-db , created by Canonical, has MongoDB for various CPU architectures . It is internal package for Canonical's Juju service https://jaas.ai . Snap repo at https://github.com/juju/juju-db-snap and copy at https://github.com/wekan/mongodb-snap
Install Snap for your distro https://snapcraft.io/docs/installing-snapd
Then:
ssh yourserver
sudo dnf install nano
sudo reboot
sudo snap install juju-db
sudo snap refresh juju-db --channel=5.3/stable
sudo snap enable juju-db
sudo snap start juju-db
nano .bashrc
There add path to commands mongo, mongodump, mongorestore etc
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/snap/juju-db/139/usr/lib/s390x-linux-gnu
export PATH="$PATH:/snap/juju-db/139/bin"
Save and exit: Ctrl-o Enter Ctrl-x
Exit ssh, and ssh to server again,
exit
ssh yourserver
Or alternatively just read new paths to mongo etc commands:
source .bashrc
Now MongoDB is at localhost port 27017. You connect to CLI with command:
mongo
New info 2022-01-18:
-
Install snapd https://snapcraft.io/docs/installing-snap-on-red-hat
-
Reboot
-
Install MongoDB, so it will be at port 27017:
sudo snap install mongo36-configurable
- Install WeKan s390x bundle from:
Old info:
sudo yum -y update
sudo yum -y install git nano npm curl wget podman-docker openssl-devel libcurl-devel clang zip unzip
docker run --name wekan-db -d -p 127.0.0.1:27017:27017 mongo
sudo npm -g install n
sudo n 12.18.0 ## newest 12.x from https://nodejs.org
mkdir repos
cd repos
git clone https://github.com/wekan/wekan
cp wekan/start-wekan.sh .
nano start-wekan.sh
# Edit start-wekan.sh for ports and paths, so starts
# "node main.js" at "build" directory".
# Look for version number from https://releases.wekan.team/s390x/
wget https://releases.wekan.team/s390x/wekan-VERSION-s390x.zip
unzip wekan*s390x.zip
./start-wekan.sh
Node.js LTS newest 12.x release for s390x can be downloaded from https://nodejs.org
MongoDB v4.x Community Server for s390x RHEL7 is at https://www.mongodb.com. For example files can be like these filenames:
- mongodb-org-mongos-4.2.3-1.el7.s390x.rpm
- mongodb-org-server-4.2.3-1.el7.s390x.rpm
- mongodb-org-shell-4.2.3-1.el7.s390x.rpm
- mongodb-org-tools-4.2.3-1.el7.s390x.rpm
Installing is similar like at Raspberry Pi
You can start it with start-wekan.sh from https://github.com/wekan/wekan or add SystemD service.
Setup ROOT_URL like described at Settings
At wiki is also info about Caddy/Nginx/Apache etc.
Some related links also at Platforms
- Install Node.js
- scp wekan-VERSION.zip bundle to s390x server, and unzip it
- Clone and build Fibers, copy fibers to bundle, and zip bundle.
git clone https://github.com/laverdet/node-fibers
cd node-fibers
node build.js
cd ..
cp -pR /home/linux1/node-fibers/bin/linux-s390x-72-glibc bundle/programs/server/node_modules/fibers/bin/
zip -r wekan-VERSION-s390x.zip bundle
Wekan - OpenSource Kanban