diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 427fd5123..23aeaeaed 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -165,13 +165,19 @@ For those who want to contribute to the Redox GUI, our GUI strategy has recently ## Priorities -You can use the following GitLab label filters to know our development priorities on the moment: +You can use the following GitLab issue label filters to know our development priorities on the moment: - [Critical](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name[]=critical) - [High-priority](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name[]=high-priority) - [Medium-priority](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name[]=medium-priority) - [Low-priority](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name[]=low-priority) +## Roadmap + +We use tracking issues for the goals in our roadmap, you can see them in the filter below: + +- [Tracking issues](https://gitlab.redox-os.org/groups/redox-os/-/issues/?label_name[]=tracking%20issue) + ## RFCs For more significant changes that affect Redox's architecture, we use the [Request for Comments](https://gitlab.redox-os.org/redox-os/rfcs) repository. diff --git a/config/base.toml b/config/base.toml index a4e705605..8f2e64e18 100644 --- a/config/base.toml +++ b/config/base.toml @@ -162,6 +162,12 @@ data = "" directory = true mode = 0o755 +[[files]] +path = "/var/run" +data = "" +directory = true +mode = 0o755 + [[files]] path = "/var/tmp" data = "" diff --git a/config/i686/ci.toml b/config/i686/ci.toml index e67944146..66828b9c2 100644 --- a/config/i686/ci.toml +++ b/config/i686/ci.toml @@ -41,6 +41,7 @@ redoxfs = {} relibc = {} resist = {} smith = {} +terminfo = {} userutils = {} uutils = {} #vim = {} # conflicting types diff --git a/config/i686/jeremy.toml b/config/i686/jeremy.toml index d76b88d7c..4c0c08c4c 100644 --- a/config/i686/jeremy.toml +++ b/config/i686/jeremy.toml @@ -9,6 +9,8 @@ filesystem_size = 4000 # Package settings [packages] +rustpython = "ignore" # https://github.com/Alexhuszagh/rust-lexical/issues/218 + # apps cosmic-text = {} pixelcannon = {} diff --git a/config/x11.toml b/config/x11.toml index 6326e6f5a..0fab62709 100644 --- a/config/x11.toml +++ b/config/x11.toml @@ -33,6 +33,10 @@ xterm = {} path = "/usr/lib/init.d/20_xenv" data = """ export DISPLAY :0 +export G_MESSAGES_DEBUG all +export LD_DEBUG all +export WEBKIT_DEBUG all +glib-compile-schemas /usr/share/glib-2.0/schemas/ """ [[files]] diff --git a/config/x86_64/ci.toml b/config/x86_64/ci.toml index 04ea65ecd..a1d61ca86 100644 --- a/config/x86_64/ci.toml +++ b/config/x86_64/ci.toml @@ -27,6 +27,7 @@ base-initfs = {} bash = {} binutils = {} bootloader = {} +bzip2 = {} ca-certificates = {} cairo = {} #cairodemo = {} # linking errors @@ -34,6 +35,7 @@ cairo = {} cargo = {} cleye = {} #cmatrix = {} # needs ncursesw now +composer = {} contain = {} coreutils = {} cosmic-edit = {} @@ -94,22 +96,29 @@ kernel = {} kibi = {} lci = {} libc-bench = {} +libavif = {} +libedit = {} libffi = {} libgcc = {} libgmp = {} libiconv = {} +libicu = {} libjpeg = {} libogg = {} +libonig = {} liborbital = {} libpng = {} libstdcxx = {} libsodium = {} libvorbis = {} +libwebp = {} libxkbcommon = {} +libuuid = {} libxml2 = {} llvm18 = {} lsd = {} lua54 = {} +lz4 = {} #mdp = {} # gcc hangs mednafen = {} mesa = {} @@ -128,10 +137,13 @@ neverball = {} #newlib = {} # obsolete #newlibtest = {} # obsolete nghttp2 = {} +nginx = {} #nushell = {} # needs cargo update onefetch = {} openjazz = {} +openssh = {} openssl1 = {} +openssl3 = {} openttd = {} openttd-opengfx = {} openttd-openmsx = {} @@ -154,6 +166,7 @@ patchelf = {} pcre = {} perg = {} periodictable = {} +php84 = {} #perl5 = {} # ctermid, tempnam, ttyname pixelcannon = {} #pixman = {} # depends on glib which does not build @@ -164,7 +177,7 @@ pop-icon-theme = {} #powerline = {} # dirs prboom = {} procedural-wallpapers-rs = {} -#python37 = {} # getaddrinfo +python312 = {} #qemu = {} # can be built, but not working readline = {} redoxerd = {} @@ -179,6 +192,7 @@ resist = {} ripgrep = {} rodioplay = {} rs-nes = {} +rsync = {} rust = {} rust64 = {} #rust-cairo = {} # linking errors @@ -207,7 +221,7 @@ simple-http-server = {} smith = {} sodium = {} sopwith = {} -#openssh = {} +sqlite3 = {} strace = {} #syobonaction = {} # linking errors terminfo = {} @@ -224,5 +238,7 @@ vttest = {} #webrender = {} # unwind #wesnoth = {} winit = {} +xxhash = {} xz = {} zlib = {} +zstd = {} diff --git a/config/x86_64/jeremy.toml b/config/x86_64/jeremy.toml index 931599743..dc8eef32e 100644 --- a/config/x86_64/jeremy.toml +++ b/config/x86_64/jeremy.toml @@ -14,10 +14,10 @@ filesystem_size = 8192 cosmic-player = {} cosmic-reader = {} #cosmic-settings = {} # requires recvmsg/sendmsg -cosmic-store = {} +#cosmic-store = {} # requires recvmsg/sendmsg cosmic-term = {} cosmic-text = {} -qemu = {} +#qemu = {} # not building schismtracker = {} # cli @@ -56,13 +56,14 @@ winit = {} autoconf = {} automake = {} cargo = {} +cookbook = {} gcc13 = {} gnu-binutils = {} gnu-make = {} nasm = {} patch = {} pkg-config = {} -#rust = {} +rust = {} #rustpython = {} # games @@ -71,7 +72,7 @@ eduke32 = {} flycast = {} freeciv = {} gigalomania = {} -love = {} +#love = {} # not building mednafen = {} mgba = {} openjazz = {} @@ -86,8 +87,8 @@ rs-nes = {} # need game for testing rust64 = {} # need roms rustual-boy = {} # need game for testing scummvm = {} # need game for testing -sm64ex = {} -spacecadetpinball = {} +#sm64ex = {} # not building +#spacecadetpinball = {} # not building #syobonaction = {} #vice = {} # broken on new toolchain #vvvvvv = {} # cannot find -lgcc_s diff --git a/config/x86_64/server-demo.toml b/config/x86_64/server-demo.toml new file mode 100644 index 000000000..42d7c5bff --- /dev/null +++ b/config/x86_64/server-demo.toml @@ -0,0 +1,199 @@ +# Configuration for server stack demonstration + +include = ["../server.toml"] + +# General settings +[general] +# Filesystem size in MiB +filesystem_size = 4096 + +# Package settings +[packages] +# Daemons +openssh = {} +nginx = {} + +# Backends +php84 = {} +composer = {} +luajit = {} +python312 = {} +# go = {} +# zig = {} + +# Tools +nano = {} +neovim = {} +rsync = {} +vim = {} +sqlite3 = {} +# tmux = {} +# htop = {} + +# Content +website = {} + +[[files]] +path = "/home/user/public_html/index.php" +data = """ + php /bin/composer install +""" + +[[files]] +postinstall = true +data = "" +path = "/etc/nginx/conf.d" +directory = true + +[[files]] +postinstall = true +path = "/etc/nginx/nginx.conf" +data = """ +user nginx; +worker_processes auto; +error_log /var/log/nginx/error.log; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} +http { + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx/access.log main; + + include mime.types; + include fastcgi.conf; + default_type application/octet-stream; + + include /etc/nginx/conf.d/*.conf; +} +""" + +[[files]] +postinstall = true +path = "/etc/nginx/conf.d/localhost.conf" +data = """ +server { + listen 80; + server_name localhost; + root /usr/share/website; + + location / { + index index.html index.htm; + } +} +""" + +[[files]] +postinstall = true +path = "/etc/nginx/conf.d/php-www.conf" +data = """ +server { + listen 8081; + server_name localhost; + root /home/user/public_html; + + index index.php index.html index.htm; + + location / { + try_files $uri $uri/ =404; + } + + location ~ \\.php$ { + include fastcgi_params; + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + } +} +""" + +[[files]] +postinstall = true +path = "/etc/php/84/php-fpm.conf" +data = """ + +include=/etc/php/84/php-fpm.d/*.conf +""" + +[[files]] +postinstall = true +path = "/etc/php/84/php-fpm.d/www.conf" +data = """ +[www] +user = user +group = user +listen = 127.0.0.1:9000 +pm = static +pm.max_children = 1 +""" + +[[files]] +postinstall = true +path = "/etc/ssh/sshd_config" +data = """ +Port 22 +AddressFamily inet +AuthorizedKeysFile .ssh/authorized_keys +PermitRootLogin yes +PasswordAuthentication yes +PermitEmptyPasswords yes +Subsystem sftp /usr/libexec/sftp-server +""" + +[users.nobody] +password = "" +shell = "/usr/bin/ion" #TODO: nologin? + +[users.nginx] +password = "" +shell = "/usr/bin/ion" #TODO: nologin? + +[[files]] +path = "/home/user/server.sh" +data = """ +#!/usr/bin/env bash + +/bin/sshd -D & +nginx -g "daemon off;" & +php-fpm --nodaemonize & +""" + +[[files]] +path = "/home/user/Welcome.txt" +data = """ +############################################################################## +# Welcome to Redox Server Demo! +# +# This is a quick demonstration of Redox used as server stack. +# At the moment we support SSH, NGINX, Python, PHP. There's more to come +# +# This server demo is insecure by design, we encourage you to get familiar into +# basics of server security if you wish to use this as a production server. +# +# To start the daemon, run +# > sudo bash server.sh +# +# The server will start port 22 (ssh), 80 (static web) and 8080 (php) +############################################################################## +""" diff --git a/cookbook b/cookbook index ad5c95233..ae06273f8 160000 --- a/cookbook +++ b/cookbook @@ -1 +1 @@ -Subproject commit ad5c9523350ae3640acf9fb80a1d37ac05a3c893 +Subproject commit ae06273f81ac0eb488c8b8b5d85f5deb38df72cc diff --git a/installer b/installer index 01a3adb66..97dd77918 160000 --- a/installer +++ b/installer @@ -1 +1 @@ -Subproject commit 01a3adb66269648732dbb8e130130d8ca2d3e23f +Subproject commit 97dd77918e7027c6c57d537b7eb732bbd22739af diff --git a/mk/config.mk b/mk/config.mk index 74d8fae8d..a4e2db051 100644 --- a/mk/config.mk +++ b/mk/config.mk @@ -74,6 +74,9 @@ endif ifeq ($(REPO_DEBUG),1) export COOKBOOK_NOSTRIP=true export COOKBOOK_DEBUG=true +#TODO: https://gitlab.redox-os.org/redox-os/relibc/-/issues/226 +# export PROFILE=debug +# export RUSTCFLAGS="-Cdebuginfo=2" endif UNAME := $(shell uname) diff --git a/mk/qemu.mk b/mk/qemu.mk index b9740e619..688526a9e 100644 --- a/mk/qemu.mk +++ b/mk/qemu.mk @@ -200,9 +200,13 @@ else ifneq ($(bridge),) QEMUFLAGS+=-netdev bridge,br=$(bridge),id=net0 else ifeq ($(net),redir) - # port 8080 and 8083 - webservers + # port 8022 - ssh + # port 8080-8083 - webservers # port 64126 - our gdbserver implementation - QEMUFLAGS+=-netdev user,id=net0,hostfwd=tcp::8080-:8080,hostfwd=tcp::8083-:8083,hostfwd=tcp::64126-:64126$(EXTRANETARGS) + FWD_PORTS := 8081 8082 8083 64126 + FWD_FLAGS := hostfwd=tcp::8022-:22,hostfwd=tcp::8080-:80 + FWD_FLAGS2 := $(foreach p,$(FWD_PORTS),,hostfwd=tcp::$(p)-:$(p)) + QEMUFLAGS += -netdev user,id=net0,$(FWD_FLAGS)$(subst $(eval ) ,,$(FWD_FLAGS2))$(EXTRANETARGS) else ifeq ($(net),windows) QEMUFLAGS+=-netdev user,id=net0$(EXTRANETARGS) else diff --git a/mk/repo.mk b/mk/repo.mk index dfbcacfe4..5535bfb9c 100644 --- a/mk/repo.mk +++ b/mk/repo.mk @@ -166,14 +166,44 @@ else $(MAKE) f.$* endif +# Invoke repo.sh and push for one of more targets separated by comma +rp.%: $(FSTOOLS_TAG) FORCE +ifeq ($(PODMAN_BUILD),1) + $(PODMAN_RUN) make $@ +else + $(MAKE) r.$* + $(MAKE) p.$* +endif + +# Invoke clean.sh, repo.sh and push for one of more targets separated by comma +crp.%: $(FSTOOLS_TAG) FORCE +ifeq ($(PODMAN_BUILD),1) + $(PODMAN_RUN) make $@ +else + $(MAKE) c.$* + $(MAKE) r.$* + $(MAKE) p.$* +endif + +# Invoke unfetch.sh. clean.sh, repo.sh and push for one of more targets separated by comma +ucrp.%: $(FSTOOLS_TAG) FORCE +ifeq ($(PODMAN_BUILD),1) + $(PODMAN_RUN) make $@ +else + $(MAKE) u.$* + $(MAKE) c.$* + $(MAKE) r.$* + $(MAKE) p.$* +endif export DEBUG_BIN?= -# Debug a recipe with gdbgui inside podman, for example: debug.drivers-initfs DEBUG_BIN=pcid -# Please set REPO_DEBUG=1 to your .config to enable debug symbols and run `make cr.recipe rebuild` -# Also, before opening gdbgui at http://localhost:5000, start qemu with `make qemu gdb=yes` -# Experimental and may not work if ARCH is different with what podman is running +# Debug a statically linked program with gdbgui, for example: debug.drivers-initfs DEBUG_BIN=pcid +# Enable debug symbols with `REPO_DEBUG=1 make cr.recipe rebuild`, make sure `file` outputs "debug_info, not stripped" +# Open http://localhost:5000/dashboard, start QEMU with `make qemu kvm=no QEMU_SMP=1 gdb=yes` before opening a session +# Experimental, may not work if ARCH is different with what host is running debug.%: $(FSTOOLS_TAG) FORCE +ifeq ($(PODMAN_BUILD),1) @cd cookbook/$(shell make find.$* | grep ^recipes) && \ export RECIPE_STAGE=target/$(TARGET)/stage && \ export BIN_PATH=$$(find $$RECIPE_STAGE -type f -name "$(DEBUG_BIN)" -or -type f -name "$*") && \ @@ -186,3 +216,13 @@ debug.%: $(FSTOOLS_TAG) FORCE redox-kernel-debug --gdb-cmd "gdb -ex 'set confirm off' \ -ex 'add-symbol-file /binary' \ -ex 'target remote host.containers.internal:1234'" +else + @cd cookbook/$(shell make find.$* | grep ^recipes) && \ + export RECIPE_STAGE=target/$(TARGET)/stage && \ + export BIN_PATH=$$(find $$RECIPE_STAGE -type f -name "$(DEBUG_BIN)" -or -type f -name "$*") && \ + file $$BIN_PATH 2> /dev/null || ( echo "Binary is not found, please set DEBUG_BIN" && exit 1 ) && \ + echo "Opening gdbgui for debugging $* with binary '$$BIN_PATH'" && echo "----------" && \ + gdbgui.pex --gdb-cmd "gdb -ex 'set confirm off' \ + -ex 'add-symbol-file $$BIN_PATH' \ + -ex 'target remote localhost:1234'" +endif diff --git a/podman/redox-base-containerfile b/podman/redox-base-containerfile index 82f70db74..682dd7c40 100644 --- a/podman/redox-base-containerfile +++ b/podman/redox-base-containerfile @@ -9,79 +9,79 @@ RUN useradd --create-home --no-log-init --uid _UID_ poduser \ && chown -R root:root /home \ && apt-get update \ && apt-get install -y --no-install-recommends \ - ant \ - appstream \ - appstream-compose \ - autoconf \ - autoconf2.69 \ - automake \ - autopoint \ - bison \ - bsdextrautils \ - build-essential \ - clang \ - cmake \ - curl \ - dos2unix \ - doxygen \ - expect \ - file \ - flex \ - fuse3 \ - g++ \ - genisoimage \ - git \ - git-lfs \ - gperf \ - gtk-doc-tools \ - help2man \ - intltool \ - libc6-dev-i386 \ - libexpat-dev \ - libfontconfig1-dev \ - libfuse3-dev \ - libgdk-pixbuf2.0-bin \ - libglib2.0-dev-bin \ - libgmp-dev \ - libhtml-parser-perl \ - libjpeg-dev \ - libmpfr-dev \ - libparse-yapp-perl \ - libpng-dev \ - libsdl1.2-dev \ - libsdl2-ttf-dev \ - llvm \ - lua5.4 \ - lzip \ - m4 \ - make \ - meson \ - nasm \ - ninja-build \ - patch \ - patchelf \ - perl \ - pkg-config \ - po4a \ - protobuf-compiler \ - python3 \ - python3-dev \ - python3-mako \ - python3-venv \ - rsync \ - ruby \ - scons \ - ssh \ - syslinux-utils \ - texinfo \ - unifdef \ - unzip \ - wget \ - xdg-utils \ - xfonts-utils \ - xorg-dev \ - xutils-dev \ - xxd \ - zip \ - zlib1g-dev \ - zstd + ant \ + appstream \ + appstream-compose \ + autoconf \ + autoconf2.69 \ + automake \ + autopoint \ + bison \ + bsdextrautils \ + build-essential \ + clang \ + cmake \ + curl \ + dos2unix \ + doxygen \ + expect \ + file \ + flex \ + fuse3 \ + g++ \ + genisoimage \ + git \ + git-lfs \ + gperf \ + gtk-doc-tools \ + help2man \ + intltool \ + libc6-dev-i386 \ + libexpat-dev \ + libfontconfig1-dev \ + libfuse3-dev \ + libgdk-pixbuf2.0-bin \ + libglib2.0-dev-bin \ + libgmp-dev \ + libhtml-parser-perl \ + libjpeg-dev \ + libmpfr-dev \ + libparse-yapp-perl \ + libpng-dev \ + libsdl1.2-dev \ + libsdl2-ttf-dev \ + llvm \ + lua5.4 \ + lzip \ + m4 \ + make \ + meson \ + nasm \ + ninja-build \ + patch \ + patchelf \ + perl \ + pkg-config \ + po4a \ + protobuf-compiler \ + python3 \ + python3-dev \ + python3-mako \ + python3-venv \ + rsync \ + ruby \ + scons \ + ssh \ + syslinux-utils \ + texinfo \ + unifdef \ + unzip \ + wget \ + xdg-utils \ + xfonts-utils \ + xorg-dev \ + xutils-dev \ + xxd \ + zip \ + zlib1g-dev \ + zstd diff --git a/redoxfs b/redoxfs index 0cb6f3cad..84288a2f5 160000 --- a/redoxfs +++ b/redoxfs @@ -1 +1 @@ -Subproject commit 0cb6f3cad583f7b0fd958094f35187f49077f154 +Subproject commit 84288a2f5dd35d7d64bf3c0aba063f9f81ff48c2 diff --git a/relibc b/relibc index 2f0d5eb97..7ed934a01 160000 --- a/relibc +++ b/relibc @@ -1 +1 @@ -Subproject commit 2f0d5eb970337f595128505d1435a1086f998600 +Subproject commit 7ed934a01d2ac8ab603b6dc24e918d8197192068 diff --git a/rust b/rust index 675042b53..687c5fa2c 160000 --- a/rust +++ b/rust @@ -1 +1 @@ -Subproject commit 675042b53266e5fb2e1933355782f098c5406e3a +Subproject commit 687c5fa2c385b8d169fdf95424f755588f95e174 diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 65eb22714..306bdf6fc 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2025-01-12" +channel = "nightly-2025-10-03" components = ["rust-src", "rustfmt", "clippy"] profile = "minimal" diff --git a/targets/i686-unknown-redox.json b/targets/i686-unknown-redox.json new file mode 100644 index 000000000..889e1eeb9 --- /dev/null +++ b/targets/i686-unknown-redox.json @@ -0,0 +1,49 @@ +{ + "arch": "x86", + "cpu": "pentiumpro", + "crt-objects-fallback": "false", + "crt-static-allows-dylibs": true, + "crt-static-default": true, + "crt-static-respected": true, + "data-layout": "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-i128:128-f64:32:64-f80:32-n8:16:32-S128", + "dynamic-linking": true, + "env": "relibc", + "has-rpath": true, + "has-thread-local": true, + "late-link-args": { + "gnu-cc": [ + "-lgcc" + ], + "gnu-lld-cc": [ + "-lgcc" + ] + }, + "linker-flavor": "gnu-cc", + "llvm-target": "i686-unknown-redox", + "max-atomic-width": 64, + "metadata": { + "description": null, + "host_tools": null, + "std": null, + "tier": null + }, + "os": "redox", + "plt-by-default": false, + "position-independent-executables": true, + "pre-link-args": { + "gnu-cc": [ + "-m32" + ], + "gnu-lld-cc": [ + "-m32" + ] + }, + "relro-level": "full", + "stack-probes": { + "kind": "call" + }, + "target-family": [ + "unix" + ], + "target-pointer-width": 32 +} diff --git a/targets/riscv64gc-unknown-redox.json b/targets/riscv64gc-unknown-redox.json index bf46961c4..97d191578 100644 --- a/targets/riscv64gc-unknown-redox.json +++ b/targets/riscv64gc-unknown-redox.json @@ -37,5 +37,5 @@ "target-family": [ "unix" ], - "target-pointer-width": "64" + "target-pointer-width": 64 }