Compare commits

..

1 Commits

Author SHA1 Message Date
Ribbon 5203db8829 Change the x86_64 target to single-core on QEMU 2024-02-10 09:10:47 +00:00
15 changed files with 54 additions and 128 deletions

View File

@ -15,7 +15,7 @@ before_script:
build-essential \ build-essential \
curl \ curl \
flex \ flex \
fuse3 \ fuse \
git \ git \
libfuse-dev \ libfuse-dev \
nasm \ nasm \

View File

@ -20,7 +20,7 @@ On [this](https://doc.redox-os.org/book/ch01-02-philosophy.html) page we explain
Join us on [Matrix Chat](https://doc.redox-os.org/book/ch13-01-chat.html) to discuss issues or ask questions. Join us on [Matrix Chat](https://doc.redox-os.org/book/ch13-01-chat.html) to discuss issues or ask questions.
## Important Places to Contribute ## Suggestions for Contributions
(Before starting to contribute you **must** read the [FAQ](https://www.redox-os.org/faq/) and the [Redox Book](https://doc.redox-os.org/book/)) (Before starting to contribute you **must** read the [FAQ](https://www.redox-os.org/faq/) and the [Redox Book](https://doc.redox-os.org/book/))
@ -29,49 +29,46 @@ You can contribute to the Redox documentation and code on these repositories:
(The order is based on difficulty, easy things first) (The order is based on difficulty, easy things first)
- [Website](https://gitlab.redox-os.org/redox-os/website) - [Website](https://gitlab.redox-os.org/redox-os/website)
- [Book](https://gitlab.redox-os.org/redox-os/book) - High-level documentation - [Book](https://gitlab.redox-os.org/redox-os/book)
- [Build System Configuration](https://gitlab.redox-os.org/redox-os/redox) - Our main repository - [Build System Configuration](https://gitlab.redox-os.org/redox-os/redox) - Our main repository
- [Cookbook](https://gitlab.redox-os.org/redox-os/cookbook) - Ports system - [Cookbook](https://gitlab.redox-os.org/redox-os/cookbook) - Package system
- [Orbital](https://gitlab.redox-os.org/redox-os/orbital) - Display server and window manager
- [Package Manager](https://gitlab.redox-os.org/redox-os/pkgutils)
- [relibc](https://gitlab.redox-os.org/redox-os/relibc) - Redox C Library - [relibc](https://gitlab.redox-os.org/redox-os/relibc) - Redox C Library
- [Drivers](https://gitlab.redox-os.org/redox-os/drivers) - Device daemons - [Drivers](https://gitlab.redox-os.org/redox-os/drivers)
- [Kernel](https://gitlab.redox-os.org/redox-os/kernel) - [Kernel](https://gitlab.redox-os.org/redox-os/kernel)
### Skill Levels ### Places to Contribute
If you aren't fluent in Rust: If you aren't fluent in Rust:
- Write documentation - Write documentation
- Use and test Redox, fill issues for bugs or needed features (please verify the repository issues before) - Use and test Redox, fill issues for bugs or needed features (verify the repository issues before)
- Web development on the website (we don't accept JavaScript code) - Web development on the [website](https://gitlab.redox-os.org/redox-os/website)
- Write unit tests (may require minimal knowledge of Rust) - Write unit tests (may require minimal knowledge of Rust)
If you are fluent in Rust, but not operating system Development: If you are fluent in Rust, but not operating system Development:
- Improve the Orbital display server and window manager.
- Port programs written in Rust to Redox (in most cases you need to port crates, be aware of missing functions on relibc, porting without these functions will make patches dirty) - Port programs written in Rust to Redox (in most cases you need to port crates, be aware of missing functions on relibc, porting without these functions will make patches dirty)
- Improve the program compatibility in relibc - [relibc](https://gitlab.redox-os.org/redox-os/relibc) - Redox C Library
- Improve the package manager - The [Ion Shell](https://gitlab.redox-os.org/redox-os/ion)
- Improve the [Ion](https://gitlab.redox-os.org/redox-os/ion) shell - [Package Manager](https://gitlab.redox-os.org/redox-os/pkgutils)
If you are fluent in Rust, and have experience with operating system development: If you are fluent in Rust, and have experience with operating system development:
- Familiarize yourself with the repository and code - Familiarize yourself with the repository and codebase
- Grep for `TODO`, `FIXME`, `BUG`, `UNOPTIMIZED`, `REWRITEME`, `DOCME`, and `PRETTYFYME` and fix the code you find - Grep for `TODO`, `FIXME`, `BUG`, `UNOPTIMIZED`, `REWRITEME`, `DOCME`, and `PRETTYFYME` and fix the code you find
- Update old code to remove warnings - Update older code to remove warnings
- Improve and optimize code, especially in the kernel - Improve and optimize code, especially in the kernel
- Write device drivers - Write drivers
For those who want to contribute to the Redox GUI, our GUI strategy has recently changed. For those who want to contribute to the Redox GUI, our GUI strategy has recently changed.
- We are improving the [Orbital](https://gitlab.redox-os.org/redox-os/orbital) display server and window manager, you can read more about it on [this](https://gitlab.redox-os.org/redox-os/redox/-/issues/1430) tracking issue. - We are porting the [COSMIC compositor](https://github.com/pop-os/cosmic-comp), help wanted.
- Redox is in the process of adopting other Rust-written GUI toolkits, such as [Iced](https://iced.rs) and [Slint](https://slint-ui.com/). Please check out those projects if this is your area of interest. - Redox is in the process of adopting other Rust-lang GUIs such as [Iced](https://iced.rs) and [Slint](https://slint-ui.com/). Please check out those projects if this is your area of interest.
- OrbTk is in maintenance mode, and its developers have moved to other projects such as the ones below. There is currently no Redox-specific GUI development underway. - OrbTk is in maintenance mode, and its developers have moved to other projects such as the ones below. There is currently no Redox-specific GUI development underway.
## Tracking Issues Index ## Tracking Issues Index
We use an index to track the development priorities, you can find them on [this](https://gitlab.redox-os.org/redox-os/redox/-/issues/1384) page. We use the Tracking Issues Index to ease the development workflow, you can find them on [this](https://gitlab.redox-os.org/redox-os/redox/-/issues/1384) page.
## Build System ## Build System

View File

@ -297,17 +297,9 @@ freebsd()
# This function takes care of installing all dependencies for building Redox on # This function takes care of installing all dependencies for building Redox on
# Arch Linux # Arch Linux
# @params: $1 the emulator to install, "virtualbox" or "qemu" # @params: $1 the emulator to install, "virtualbox" or "qemu"
# $2 install non-interactively, boolean
############################################################################### ###############################################################################
archLinux() archLinux()
{ {
noninteractive=$2
pacman_install="pacman -S --needed"
if [ "$noninteractive" = true ]; then
pacman_install+=" --noconfirm"
fi
echo "Detected Arch Linux" echo "Detected Arch Linux"
packages="cmake \ packages="cmake \
fuse \ fuse \
@ -368,34 +360,20 @@ archLinux()
#sudo pacman -Syu #sudo pacman -Syu
echo "Installing packages $packages..." echo "Installing packages $packages..."
sudo $pacman_install $packages sudo pacman -S --needed $packages
} }
############################################################################### ###############################################################################
# This function takes care of installing all dependencies for building Redox on # This function takes care of installing all dependencies for building Redox on
# Debian-based Linux # Debian-based Linux
# @params: $1 the emulator to install, "virtualbox" or "qemu" # @params: $1 the emulator to install, "virtualbox" or "qemu"
# $2 install non-interactively, boolean # $2 the package manager to use
# $3 the package manager to use
############################################################################### ###############################################################################
ubuntu() ubuntu()
{ {
noninteractive=$2
package_manager=$3
echo "Detected Ubuntu/Debian" echo "Detected Ubuntu/Debian"
echo "Updating system..." echo "Updating system..."
sudo $package_manager update sudo "$2" update
if [ $package_manager == "apt-get" ]; then
if [ "$noninteractive" = true ]; then
install_command+="DEBIAN_FRONTEND=noninteractive apt-get install --assume-yes --quiet"
else
install_command="apt-get install"
fi
else
install_command="$package_manager install"
fi
echo "Installing required packages..." echo "Installing required packages..."
pkgs="\ pkgs="\
ant \ ant \
@ -411,7 +389,6 @@ ubuntu()
doxygen \ doxygen \
file \ file \
flex \ flex \
fuse3 \
g++ \ g++ \
genisoimage \ genisoimage \
git \ git \
@ -449,18 +426,17 @@ ubuntu()
xdg-utils \ xdg-utils \
xxd \ xxd \
zip \ zip \
zstd \
" "
# Not availible for at least ARM hosts # Not availible for at least ARM hosts
case "$host_arch" in case "$host_arch" in
x86*|i?86) pkgs="$pkgs libc6-dev-i386 syslinux-utils";; x86*|i?86) pkgs="$pkgs libc6-dev-i386 syslinux-utils";;
esac esac
sudo $install_command $pkgs sudo "$2" install $pkgs
if [ "$1" == "qemu" ]; then if [ "$1" == "qemu" ]; then
if [ -z "$(which qemu-system-x86_64)" ]; then if [ -z "$(which qemu-system-x86_64)" ]; then
echo "Installing QEMU..." echo "Installing QEMU..."
sudo $install_command qemu-system-x86 qemu-kvm sudo "$2" install qemu-system-x86 qemu-kvm
sudo $install_command qemu-efi-arm qemu-system-arm sudo "$2" install qemu-efi-arm qemu-system-arm
else else
echo "QEMU already installed!" echo "QEMU already installed!"
fi fi
@ -472,10 +448,10 @@ ubuntu()
echo "To install virtualbox on debian, see https://wiki.debian.org/VirtualBox" echo "To install virtualbox on debian, see https://wiki.debian.org/VirtualBox"
echo "Please install VirtualBox and re-run this script," echo "Please install VirtualBox and re-run this script,"
echo "or run with -e qemu" echo "or run with -e qemu"
exit 1 exit 1
else else
echo "Installing VirtualBox..." echo "Installing VirtualBox..."
sudo $install_command virtualbox sudo "$2" install virtualbox
fi fi
else else
echo "VirtualBox already installed!" echo "VirtualBox already installed!"
@ -490,27 +466,19 @@ ubuntu()
# This function takes care of installing all dependencies for building Redox on # This function takes care of installing all dependencies for building Redox on
# Fedora Linux # Fedora Linux
# @params: $1 the emulator to install, "virtualbox" or "qemu" # @params: $1 the emulator to install, "virtualbox" or "qemu"
# $2 install non-interactively, boolean
############################################################################### ###############################################################################
fedora() fedora()
{ {
noninteractive=$2
dnf_install="dnf install"
if [ "$noninteractive" = true ]; then
dnf_install+=" --assumeyes --quiet"
fi
echo "Detected Fedora" echo "Detected Fedora"
if [ -z "$(which git)" ]; then if [ -z "$(which git)" ]; then
echo "Installing git..." echo "Installing git..."
sudo $dnf_install git-all sudo dnf install git-all
fi fi
if [ "$1" == "qemu" ]; then if [ "$1" == "qemu" ]; then
if [ -z "$(which qemu-system-x86_64)" ]; then if [ -z "$(which qemu-system-x86_64)" ]; then
echo "Installing QEMU..." echo "Installing QEMU..."
sudo $dnf_install qemu-system-x86 qemu-kvm sudo dnf install qemu-system-x86 qemu-kvm
else else
echo "QEMU already installed!" echo "QEMU already installed!"
fi fi
@ -580,19 +548,19 @@ fedora()
clang \ clang \
doxygen \ doxygen \
ant \ ant \
protobuf-compiler \ protobuf-compiler ; do rpm -q $pkg > /dev/null || echo $pkg; done)
zstd ; do rpm -q $pkg > /dev/null || echo $pkg; done)
# If the list of packages is not empty, install missing # If the list of packages is not empty, install missing
COUNT=$(echo $PKGS | wc -w) COUNT=$(echo $PKGS | wc -w)
if [ $COUNT -ne 0 ]; then if [ $COUNT -ne 0 ]; then
echo "Installing necessary build tools..." echo "Installing necessary build tools..."
sudo $dnf_install $PKGS sudo dnf install $PKGS
fi fi
} }
############################################################################### ###############################################################################
# This function takes care of installing all dependencies for building Redox on # This function takes care of installing all dependencies for building Redox on
# *SUSE Linux # *SUSE Linux
# @params: $1 the emulator to install, "virtualbox" or "qemu"
############################################################################### ###############################################################################
suse() suse()
{ {
@ -849,10 +817,6 @@ usage()
echo " -p [package Choose an Ubuntu package manager, apt-fast or" echo " -p [package Choose an Ubuntu package manager, apt-fast or"
echo " manager] aptitude" echo " manager] aptitude"
echo " -d Only install the dependencies, skip boot step" echo " -d Only install the dependencies, skip boot step"
echo " -y Install non-interactively. Answer \"yes\" or"
echo " select the default option for rustup and package"
echo " managers. Only the apt, dnf and pacman"
echo " package managers are supported."
echo "EXAMPLES:" echo "EXAMPLES:"
echo echo
echo "./bootstrap.sh -e qemu" echo "./bootstrap.sh -e qemu"
@ -875,10 +839,8 @@ cargoInstall() {
# This function takes care of everything associated to rust, and the version manager # This function takes care of everything associated to rust, and the version manager
# That controls it, it can install rustup and uninstall multirust as well as making # That controls it, it can install rustup and uninstall multirust as well as making
# sure that the correct version of rustc is selected by rustup # sure that the correct version of rustc is selected by rustup
# @params: $1 install non-interactively, boolean
#################################################################################### ####################################################################################
rustInstall() { rustInstall() {
noninteractive=$1
# Check to see if multirust is installed, we don't want it messing with rustup # Check to see if multirust is installed, we don't want it messing with rustup
# In the future we can probably remove this but I believe it's good to have for now # In the future we can probably remove this but I believe it's good to have for now
if [ -e /usr/local/lib/rustlib/uninstall.sh ] ; then if [ -e /usr/local/lib/rustlib/uninstall.sh ] ; then
@ -896,21 +858,15 @@ rustInstall() {
fi fi
# If rustup is not installed we should offer to install it for them # If rustup is not installed we should offer to install it for them
if [ -z "$(which rustup)" ]; then if [ -z "$(which rustup)" ]; then
rustup_options="--default-toolchain nightly"
echo "You do not have rustup installed." echo "You do not have rustup installed."
if [ "$noninteractive" = true ]; then echo "We HIGHLY recommend using rustup."
rustup="y" echo "Would you like to install it now?"
rustup_options+=" -y" echo "*WARNING* this involves a 'curl | sh' style command"
else printf "(y/N): "
echo "We HIGHLY recommend using rustup." read rustup
echo "Would you like to install it now?"
echo "*WARNING* this involves a 'curl | sh' style command"
printf "(y/N): "
read rustup
fi
if echo "$rustup" | grep -iq "^y" ;then if echo "$rustup" | grep -iq "^y" ;then
#install rustup #install rustup
curl https://sh.rustup.rs -sSf | sh -s -- $rustup_options curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly
# You have to add the rustup variables to the $PATH # You have to add the rustup variables to the $PATH
echo "export PATH=\"\$HOME/.cargo/bin:\$PATH\"" >> ~/.bashrc echo "export PATH=\"\$HOME/.cargo/bin:\$PATH\"" >> ~/.bashrc
# source the variables so that we can execute rustup commands in the current shell # source the variables so that we can execute rustup commands in the current shell
@ -1010,9 +966,7 @@ emulator="qemu"
defpackman="apt-get" defpackman="apt-get"
dependenciesonly=false dependenciesonly=false
update=false update=false
noninteractive=false while getopts ":e:p:udhs" opt
while getopts ":e:p:udhys" opt
do do
case "$opt" in case "$opt" in
e) emulator="$OPTARG";; e) emulator="$OPTARG";;
@ -1020,7 +974,6 @@ do
d) dependenciesonly=true;; d) dependenciesonly=true;;
u) update=true;; u) update=true;;
h) usage;; h) usage;;
y) noninteractive=true;;
s) statusCheck && exit;; s) statusCheck && exit;;
\?) echo "I don't know what to do with that option, try -h for help"; exit 1;; \?) echo "I don't know what to do with that option, try -h for help"; exit 1;;
esac esac
@ -1028,7 +981,7 @@ done
banner banner
rustInstall "$noninteractive" rustInstall
if [ "$update" == "true" ]; then if [ "$update" == "true" ]; then
git pull upstream master git pull upstream master
@ -1047,10 +1000,10 @@ else
suse "$emulator" suse "$emulator"
# Debian or any derivative of it # Debian or any derivative of it
elif hash 2>/dev/null apt-get; then elif hash 2>/dev/null apt-get; then
ubuntu "$emulator" "$noninteractive" "$defpackman" ubuntu "$emulator" "$defpackman"
# Fedora # Fedora
elif hash 2>/dev/null dnf; then elif hash 2>/dev/null dnf; then
fedora "$emulator" "$noninteractive" fedora "$emulator"
# Gentoo # Gentoo
elif hash 2>/dev/null emerge; then elif hash 2>/dev/null emerge; then
gentoo "$emulator" gentoo "$emulator"
@ -1059,7 +1012,7 @@ else
solus "$emulator" solus "$emulator"
# Arch Linux # Arch Linux
elif hash 2>/dev/null pacman; then elif hash 2>/dev/null pacman; then
archLinux "$emulator" "$noninteractive" archLinux "$emulator"
# FreeBSD # FreeBSD
elif hash 2>/dev/null pkg; then elif hash 2>/dev/null pkg; then
freebsd "$emulator" freebsd "$emulator"

View File

@ -9,7 +9,6 @@
prompt = false prompt = false
[packages] [packages]
bootloader = {}
bootstrap = {} bootstrap = {}
escalated = {} escalated = {}
initfs = {} initfs = {}

View File

@ -49,3 +49,9 @@ path = "/etc/net/ip_subnet"
data = """ data = """
255.255.255.0 255.255.255.0
""" """
[[files]]
path = "/etc/net/mac"
data = """
54-52-00-ab-cd-ef
"""

View File

@ -10,6 +10,7 @@ filesystem_size = 512
# Package settings # Package settings
[packages] [packages]
bash = {} bash = {}
bootloader = {}
ca-certificates = {} ca-certificates = {}
contain = {} contain = {}
coreutils = {} coreutils = {}

View File

@ -33,7 +33,6 @@ filesystem_size = 1536
[packages] [packages]
# GUI Apps # GUI Apps
cosmic-edit = {} cosmic-edit = {}
cosmic-files = {}
periodictable = {} periodictable = {}
# GUI Data # GUI Data

View File

@ -10,7 +10,6 @@ filesystem_size = 8192
# Package settings # Package settings
[packages] [packages]
# apps # apps
boxedwine = {}
cosmic-edit = {} cosmic-edit = {}
cosmic-files = {} cosmic-files = {}
cosmic-term = {} cosmic-term = {}
@ -27,7 +26,6 @@ ffmpeg6 = {}
gnu-grep = {} gnu-grep = {}
lua54 = {} lua54 = {}
nano = {} nano = {}
nushell = {}
perg = {} perg = {}
relibc-tests = {} relibc-tests = {}
ripgrep = {} ripgrep = {}

@ -1 +1 @@
Subproject commit d0378b5c485ef7943e744ebeda4ecc453c7cd7b7 Subproject commit ac090c745dadbd25c9abd70b6b0feef45ff5fe50

@ -1 +1 @@
Subproject commit 1c30f4a3c1f55974aed694b478ff77c0552a1576 Subproject commit 17219dab9f58e2bf2c243f745fecce2d8730f82f

View File

@ -18,7 +18,7 @@ else ifeq ($(ARCH),x86_64)
QEMU_MACHINE?=q35 QEMU_MACHINE?=q35
QEMU_CPU?=core2duo QEMU_CPU?=core2duo
QEMU_EFI=/usr/share/OVMF/OVMF_CODE.fd QEMU_EFI=/usr/share/OVMF/OVMF_CODE.fd
QEMUFLAGS+=-smp 4 -m 2048 QEMUFLAGS+=-smp 1 -m 2048
else ifeq ($(ARCH),aarch64) else ifeq ($(ARCH),aarch64)
efi=yes efi=yes
live=yes live=yes

View File

@ -12,7 +12,7 @@ RUN apt-get update \
curl \ curl \
file \ file \
flex \ flex \
fuse3 \ fuse \
genisoimage \ genisoimage \
git \ git \
gperf \ gperf \

@ -1 +1 @@
Subproject commit 14a07dc268ec41db87d4f453022ac8805b918d20 Subproject commit b3dd3aa5f0e1b3e56f4d3f06e45966fd53743367

2
relibc

@ -1 +1 @@
Subproject commit 65589f9c935a7eaaa2d1d8db4875fbb458b29edd Subproject commit a7b2294b6200aa6a1971d1ac59c5dc33babbd9d6

View File

@ -1,27 +0,0 @@
#!/usr/bin/env bash
if [ $# = 0 ]
then
find cookbook/recipes \( -name stage.pkgar -o -name stage.tar.gz \) -exec ls -hs {} \;
exit 0
fi
for recipe in $@
do
if [ "$recipe" = "-h" ] || [ "$recipe" = "--help" ]
then
echo "Usage: $0 [recipe] ..."
echo " For the recipe(s), prints the size of 'stage.pkgar' and 'stage.tar.gz'."
echo " If no recipe is given, then all packages are listed."
exit 0
fi
recipe_paths=$(find cookbook/recipes -name $recipe)
for recipe_path in $recipe_paths
do
if [ -f "$recipe_path/recipe.toml" ] || [ -f "$recipe_path/recipe.sh" ]
then
find "$recipe_path" \( -name stage.pkgar -o -name stage.tar.gz \) -exec ls -hs {} \;
fi
done
done