Red Bear OS — microkernel OS in Rust, based on Redox
Derivative of Redox OS (https://www.redox-os.org) adding: - AMD GPU driver (amdgpu) via LinuxKPI compat layer - ext4 filesystem support (ext4d scheme daemon) - ACPI fixes for AMD bare metal (x2APIC, DMAR, IVRS, MCFG) - Custom branding (hostname, os-release, boot identity) Build system is full upstream Redox with RBOS overlay in local/. Patches for kernel, base, and relibc are symlinked from local/patches/ and protected from make clean/distclean. Custom recipes live in local/recipes/ with symlinks into the recipes/ search path. Build: make all CONFIG_NAME=redbear-full Sync: ./local/scripts/sync-upstream.sh
This commit is contained in:
+101
@@ -0,0 +1,101 @@
|
||||
# Configuration file of the Podman commands
|
||||
|
||||
# Configuration variables for running make in Podman
|
||||
## Tag the podman image $IMAGE_TAG
|
||||
IMAGE_TAG?=rbos-base
|
||||
## Working Directory in Podman
|
||||
CONTAINER_WORKDIR?=/mnt/redox
|
||||
|
||||
## Flag passed to the Podman volumes. :Z can be used only with SELinux
|
||||
USE_SELINUX?=1
|
||||
ifeq ($(USE_SELINUX),1)
|
||||
PODMAN_VOLUME_FLAG=:Z
|
||||
else
|
||||
PODMAN_VOLUME_FLAG=
|
||||
endif
|
||||
|
||||
# Cache layers to redox-os docker hub
|
||||
PODMAN_CACHE=
|
||||
PODMAN_CACHE_PATH=docker.io/redoxos/$(IMAGE_TAG)
|
||||
|
||||
PODMAN_CACHE_PULL?=1
|
||||
ifeq ($(PODMAN_CACHE_PULL),1)
|
||||
PODMAN_CACHE+=--cache-from=$(PODMAN_CACHE_PATH)
|
||||
endif
|
||||
|
||||
PODMAN_CACHE_PUSH?=0
|
||||
ifeq ($(PODMAN_CACHE_PUSH),1)
|
||||
PODMAN_CACHE+=--cache-to=$(PODMAN_CACHE_PATH)
|
||||
endif
|
||||
|
||||
## Podman Home Directory
|
||||
PODMAN_HOME=$(ROOT)/build/podman
|
||||
## Podman command with its many arguments
|
||||
PODMAN_VOLUMES=--volume $(ROOT):$(CONTAINER_WORKDIR)$(PODMAN_VOLUME_FLAG) --volume $(PODMAN_HOME):/root$(PODMAN_VOLUME_FLAG)
|
||||
PODMAN_ENV=--env PATH=/root/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env PODMAN_BUILD=0 --env LIBTOOLIZE=/usr/bin/libtoolize
|
||||
PODMAN_CONFIG=--env ARCH=$(ARCH) --env BOARD=$(BOARD) --env CONFIG_NAME=$(CONFIG_NAME) --env FILESYSTEM_CONFIG=$(FILESYSTEM_CONFIG) --env PREFIX_BINARY=$(PREFIX_BINARY) \
|
||||
--env CI=$(CI) --env COOKBOOK_MAKE_JOBS=$(COOKBOOK_MAKE_JOBS) --env COOKBOOK_LOGS=$(COOKBOOK_LOGS) --env COOKBOOK_VERBOSE=$(COOKBOOK_VERBOSE) --env COOKBOOK_COMPRESSED=$(COOKBOOK_COMPRESSED) \
|
||||
--env REPO_APPSTREAM=$(REPO_APPSTREAM) --env REPO_BINARY=$(REPO_BINARY) --env REPO_NONSTOP=$(REPO_NONSTOP) --env REPO_OFFLINE=$(REPO_OFFLINE) --env TESTBIN=$(TESTBIN) \
|
||||
--env HOSTED_REDOX=$(HOSTED_REDOX) --env PREFIX_USE_UPSTREAM_RUST_COMPILER=$(PREFIX_USE_UPSTREAM_RUST_COMPILER)
|
||||
PODMAN_OPTIONS=--rm --workdir $(CONTAINER_WORKDIR) --interactive --tty --cap-add SYS_ADMIN --device /dev/fuse --network=host --env TERM=$(TERM) --pids-limit=-1
|
||||
PODMAN_RUN=podman run $(PODMAN_OPTIONS) $(PODMAN_VOLUMES) $(PODMAN_ENV) $(PODMAN_CONFIG) $(IMAGE_TAG)
|
||||
|
||||
container_shell: build/container.tag
|
||||
ifeq ($(PODMAN_BUILD),1)
|
||||
$(PODMAN_RUN) bash
|
||||
else
|
||||
@echo PODMAN_BUILD=$(PODMAN_BUILD), please set it to 1 in mk/config.mk
|
||||
endif
|
||||
|
||||
container_clean: FORCE
|
||||
rm -f build/container.tag
|
||||
@echo "If podman dir cannot be removed, remove with \"sudo rm\"."
|
||||
-rm -rf $(PODMAN_HOME) || true
|
||||
@echo "For complete clean of images and containers, use \"podman system reset\""
|
||||
-podman image rm --force $(IMAGE_TAG) || true
|
||||
|
||||
container_touch: FORCE
|
||||
ifeq ($(PODMAN_BUILD),1)
|
||||
rm -f build/container.tag
|
||||
podman image exists $(IMAGE_TAG) || (echo "Image does not exist, it will be rebuilt during normal make."; exit 1)
|
||||
touch build/container.tag
|
||||
else
|
||||
@echo PODMAN_BUILD=$(PODMAN_BUILD), container not required.
|
||||
endif
|
||||
|
||||
container_kill: FORCE
|
||||
podman kill --latest --signal SIGKILL
|
||||
|
||||
## Must match the value of CONTAINER_TAG in config.mk
|
||||
build/container.tag: $(CONTAINERFILE)
|
||||
ifeq ($(PODMAN_BUILD),1)
|
||||
rm -f $@ $(FSTOOLS_TAG)
|
||||
-podman image rm --force $(IMAGE_TAG) || true
|
||||
mkdir -p $(PODMAN_HOME)
|
||||
@echo "Building Podman image. This may take some time."
|
||||
cat $(CONTAINERFILE) | podman build --file - $(PODMAN_VOLUMES) $(PODMAN_CACHE) --tag $(IMAGE_TAG)
|
||||
$(PODMAN_RUN) bash -e podman/rustinstall.sh
|
||||
mkdir -p build
|
||||
touch $@
|
||||
@echo "Podman ready!"
|
||||
else
|
||||
@echo PODMAN_BUILD=$(PODMAN_BUILD), container not required.
|
||||
endif
|
||||
|
||||
container_push: build/container.tag
|
||||
podman push $(IMAGE_TAG) $(PODMAN_CACHE_PATH)
|
||||
|
||||
KERNEL_PATH := recipes/core/kernel
|
||||
KERNEL_PATH_SOURCE := $(ROOT)/$(KERNEL_PATH)/source
|
||||
KERNEL_PATH_TARGET := $(ROOT)/$(KERNEL_PATH)/target/$(TARGET)
|
||||
|
||||
# TODO: make this work using `make debug.kernel` and remove this
|
||||
kernel_debugger:
|
||||
@echo "Building and running gdbgui container..."
|
||||
podman build -t rbos-kernel-debug - < $(ROOT)/podman/redox-gdb-containerfile
|
||||
podman run --rm -p 5000:5000 -it --name rbos-gdb \
|
||||
-v "$(KERNEL_PATH_TARGET)/build/kernel.sym:/kernel.sym" \
|
||||
-v "$(KERNEL_PATH_SOURCE)/src:/src" \
|
||||
rbos-kernel-debug --gdb-cmd "gdb -ex 'set confirm off' \
|
||||
-ex 'add-symbol-file /kernel.sym' \
|
||||
-ex 'target remote host.containers.internal:1234'"
|
||||
Reference in New Issue
Block a user