Updated Makefile and README

This commit is contained in:
Bruce Leidl 2018-12-31 18:46:26 -05:00
parent 1a09fff183
commit 5839cd3cc5
2 changed files with 28 additions and 27 deletions

View File

@ -1,4 +1,4 @@
.PHONY: help docker-image docker-shell citadel-image citadel-kernel user-rootfs update-submodules build-appimg install-build-deps .PHONY: help docker-image docker-shell citadel-image citadel-kernel user-rootfs update-submodules build-appimg install-build-deps installer
BASE_DIR = $(shell pwd) BASE_DIR = $(shell pwd)
BASE_BINDMOUNT = type=bind,source=$(BASE_DIR),target=/home/builder/citadel BASE_BINDMOUNT = type=bind,source=$(BASE_DIR),target=/home/builder/citadel
@ -10,6 +10,9 @@ undefine DOCKER_RUN
undefine DOCKER_RUN_PRIV undefine DOCKER_RUN_PRIV
endif endif
APPIMG_TARFILE = build/appimg/appimg-rootfs.tar.xz
INSTALLER_IMAGE = build/images/citadel-installer.img
# #
# https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html # https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
# #
@ -23,15 +26,17 @@ docker-image: ## Create docker builder image. You need to run this one time bef
docker-shell: ## Open an interactive shell in the docker build container configured for running bitbake commands. docker-shell: ## Open an interactive shell in the docker build container configured for running bitbake commands.
$(DOCKER_RUN) $(DOCKER_RUN)
citadel-image: ## Build citadel-image with bitbake installer: ${APPIMG_TARFILE} ## Build citadel installer image
$(DOCKER_RUN) bash -c "source setup-build-env && bitbake citadel-image" $(DOCKER_RUN) bash -c "source setup-build-env && bitbake --continue citadel-installer-image"
@echo "Installer image:"
@ls -l $(INSTALLER_IMAGE)
rootfs: ## Build citadel rootfs image with bitbake
$(DOCKER_RUN) bash -c "source setup-build-env && bitbake citadel-rootfs-image"
citadel-kernel: ## Build citadel-kernel with bitbake citadel-kernel: ## Build citadel-kernel with bitbake
$(DOCKER_RUN) bash -c "source setup-build-env && bitbake citadel-kernel" $(DOCKER_RUN) bash -c "source setup-build-env && bitbake citadel-kernel"
bootloader: ## Build systemd-boot
$(DOCKER_RUN) bash -c "source setup-build-env && bitbake systemd-boot"
build-appimg: ## Build an application image build-appimg: ## Build an application image
$(DOCKER_RUN_PRIV) bash -c 'sudo APPIMG_BUILDER_BASE=$${PWD}/appimg-builder appimg-builder/stage-one.sh --no-confirm -z -d build/appimg' $(DOCKER_RUN_PRIV) bash -c 'sudo APPIMG_BUILDER_BASE=$${PWD}/appimg-builder appimg-builder/stage-one.sh --no-confirm -z -d build/appimg'
@ -41,5 +46,8 @@ update-submodules: ## Retrieve or update submodule projects
install-build-deps: install-build-deps:
sudo apt install --no-install-recommends build-essential python bzip2 cpio chrpath diffstat file texinfo inkscape libgmp-dev libmpc-dev libelf-dev gawk sudo apt install --no-install-recommends build-essential python bzip2 cpio chrpath diffstat file texinfo inkscape libgmp-dev libmpc-dev libelf-dev gawk
clean-citadel-tools: $(APPIMG_TARFILE):
$(DOCKER_RUN) bash -c "source setup-build-env && bitbake -ccleansstate citadel-rootfs && bitbake -ccleansstate citadel-realms && bitbake -ccleansstate citadel-desktopd" $(DOCKER_RUN_PRIV) bash -c 'sudo APPIMG_BUILDER_BASE=$${PWD}/appimg-builder appimg-builder/stage-one.sh --no-confirm -z -d build/appimg'
$(INSTALLER_IMAGE): $(APPIMG_TARFILE)
$(DOCKER_RUN) bash -c "source setup-build-env && bitbake citadel-installer-image"

View File

@ -50,37 +50,30 @@ To run a shell inside the docker build container:
The shell will run in the build directory and be configured to run build commands with `bitbake`. The shell will run in the build directory and be configured to run build commands with `bitbake`.
To build a full citadel image: To build a full citadel installer image:
$ make citadel-image $ make installer
The build will take several hours the first time, but for later builds the build system will use cached artifacts stored The build will take several hours the first time, but for later builds the build system will use cached artifacts stored
in `citadel/build/sstate-cache` for components that have not changed and new builds will usually only take a few minutes. in `citadel/build/sstate-cache` for components that have not changed and new builds will usually only take a few minutes.
## Some Assembly Required ## Installer Image
Currently there are some rather unreliable scripts to make it possible to turn build output into something that you can install and run. If the installer build completes successfully, the installer disk image can be found in `citadel/build/images/citadel-installer.img`.
Very soon these scripts will be replaced by an actual installer that you can just build by running a make target, but that doesn't quite exist yet. Write this file to a USB stick (for example /dev/sdb is the USB drive you want to write to):
### Running `scripts/create_install_pack` to create installpack.tar # dd if=citadel/build/images/citadel-installer.img of=/dev/sdb bs=4M
Before creating the installpack, some artifacts must exist in the build/images directory: The installer image is a live disk from which you can run an installer program to perform a permanent installation. To
run the installer, open a citadel terminal, su to root, and run:
* `make citadel-image` Creates: `images/citadel-image-intel-corei7-64.ext2` # /usr/libexec/citadel-installer
* `make citadel-kernel` Creates: `images/bzImage`
* `make bootloader` Creates: `images/systemd-bootx64.efi`
* `make appimg-rootfs` Creates: `appimg/appimg-rootfs.tar.xz`
After all of those components have been build, you can run `scripts/create_install_pack` which will create a file in the current directory called `installpack.tar`. You can also directly specify the disk to use on the command line. Replace /dev/sda in the example with the actual
disk you want to install to. You can even use the usb disk you booted the installer from!
You can then unpack this tarball somewhere and run a script inside of it called `install.sh` to install to a USB stick (do this first, at least until you understand the process) or to install to internal disk drive. # /usr/libexec/citadel-installer /dev/sda
$ tar xvf installpack.tar
$ cd installpack
$ sudo ./install.sh /dev/sdb
The install.sh script redirects all output from the commands it runs to a file install.log in the current directory. If the last line of output does not say "Install completed successfully" then something failed. Look in install.log for information about what went wrong. The script itself does not print any output when it fails, it will just stop at one of the steps and it appears as if everything worked since there is no error output.
# Reproducible builds # Reproducible builds