From 68cb54c5d0c1a6aa4d3cb0609430ebefae056d33 Mon Sep 17 00:00:00 2001 From: mudler Date: Mon, 8 Feb 2016 22:25:57 +0100 Subject: [PATCH] Added more Env variable for customization, now directory structure is created on user behalf if there is actually a need --- README.md | 91 ++++++++++++++++++++++++------------------- sabayon-buildpackages | 36 ++++++++++------- sabayon-createrepo | 9 +++-- 3 files changed, 78 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 7035da7..1e75849 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ You can install it in sabayon with: sudo equo i sabayon-devkit ` -# Building package in a clean environment - ## Prerequisites * docker installed in the machine (`sudo equo i docker`), and the daemon started (`sudo systemctl start docker`) @@ -17,7 +15,7 @@ sudo equo i sabayon-devkit Packages can be built in a clean environment with docker by running `sabayon-buildpackages`. -*`sabayon-buildpackages` is just a script wrapper around the `builder` perl script which is placed inside a docker container.* +*`sabayon-buildpackages` and ``sabayon-createrepo are just a script wrapper around the development docker container.* ## Define your workspace @@ -43,6 +41,43 @@ If you want, you can define the workspace directory with the variable environmen `SAB_WORKSPACE=/whatever sabayon-createrepo` + +## Folder structure + +This is the folder structure of your workspace by default, but you can tweak part of it to your tastes with Environment variables: + +` + + myproject/ + myproject/portage_artifacts/ + myproject/entropy_artifacts/ + myproject/local_overlay/ + myproject/specs/ +` + +* myproject/portage\_artifacts/ -- Created when `sabayon-buildpackages` is started. It contains the portage artifacts, they will be consumed in the next steps +* myproject/entropy\_artifacts/ -- Created when `sabayon-createrepo` is started. It contains the entropy repository files. +* myproject/local_overlay/ -- is the location of your personal overlay (if necessary) +* myproject/specs -- Create it to customize the building process. It can contain custom files for make.conf, uses, envs, masks, unmasks and keywords for package compilation options + +the `specs` folder is structured like this and it's merely optional. + +as long as you create those files they are used: + +- custom.unmask: that's the place for custom unmasks +- custom.mask: contain your custom masks +- custom.use: contain your custom use flags +- custom.env: contain your custom env specifications +- custom.keywords: contain your custom keywords +- make.conf: it will replace the make.conf on the container with yours. + +you can override the Architecture folder in which files are placed specifying in the *SAB_ARCH* environment variable. Default is "intel" (can be *armarch* as for now) + +**Note: the portage_artifacts can also contain tbz2 files generated with other methods, if you already have your desired packages already compiled, you can just use `sabayon-createrepo`** + +# Building package in a clean environment + + ## Build your packages `sabayon-buildpackages` accepts the same arguments as the builder: @@ -50,49 +85,21 @@ If you want, you can define the workspace directory with the variable environmen sabayon-buildpackages app-text/tree sabayon-buildpackages plasma-meta --layman kde - sabayon-buildpackages app-foo/foobar --equo foo-misc/foobar --layman foo --layman bar foo + DOCKER_PULL_IMAGE=1 sabayon-buildpackages app-foo/foobar --equo foo-misc/foobar --layman foo --layman bar foo -* --layman foobar -- tells the script to add the "foobar" overlay from layman +* --layman foobar -- tells the script to add the "foobar" overlay from layman * --equo foo-misc/foobar -- tells the script to install "foo-misc/foobar" before compiling -* The arguments are the packages that you want compile, they can be also in the complete form *e.g. =foo-bar/misc-1.2* + Environment variables: +- DOCKER_PULL_IMAGE -- tells the script to update the docker image before compiling, enable it with 1, disable with 0 +- OUTPUT_DIR -- optional, default to "portage_artifacts" in your current working directory, it is the path where emerge generated tbz2 are stored (absolute path) +- LOCAL_OVERLAY -- optional, you can specify the path to your local overlay (absolute path) + The arguments are the packages that you want compile, they can be also in the complete form *e.g. =foo-bar/misc-1.2* -## Folder structure - -This is the folder structure that will be automatically created: - -` - - myproject/ - myproject/portage_artifacts/ - myproject/entropy_artifacts/ - myproject/local_overlay/ - myproject/specs/ -` - -* myproject/portage\_artifacts/ -- will contain the portage artifacts, they will be consumed in the next steps -* myproject/entropy\_artifacts/ -- will contain the entropy output, our Sabayon repository for the **.tbz2** packages that where in **myproject/portage_artifacts/** -* myproject/local_overlay/ -- is the location of your personal overlay (if necessary) -* myproject/specs -- contain custom files for uses, envs, masks, unmasks and keywords for package compilation options - -the `specs` folder is structured like this: - -- custom.unmask: will contain your custom unmasks -- custom.mask: will contain your custom masks -- custom.use: will contain your custom use flags -- custom.env: will contain your custom env specifications -- custom.keywords: will contain your custom keywords - -you can override the Architecture folder in which files are placed specifying in the *SAB_ARCH* environment variable. Default is "intel" (can be *armarch* as for now) # Create Sabayon repository from \*.tbz2 in a clean environment -## Prerequisites - -* docker installed in the machine (`sudo equo i docker`), and the daemon started (`sudo systemctl start docker`) -* if you don't want to run that as root, the user where are you running the script must be in the docker group (`sudo gpasswd -a $USER docker`) - You can create Sabayon repositories from packages built with emerge in a clean environment with docker by running `sabayon-createrepo`. The script will use a docker container to inject packages from *portage_artifacts/* in your project folder, the output will be available in *entropy_artifacts/*. @@ -102,9 +109,11 @@ Example: sabayon-createrepo REPOSITORY_NAME=mytest REPOSITORY_DESCRIPTION="My Wonderful Repository" sabayon-createrepo - -* REPOSITORY_NAME -- is your repository name id -* REPOSITORY_DESCRIPTION -- is your repository description + +* REPOSITORY_NAME -- optional, is your repository name id +* REPOSITORY_DESCRIPTION -- optional, is your repository description +* PORTAGE_ARTIFACTS -- optional if you use the tools in the same dir, you can specify where portage artifacts (\*.tbz2 files) are (absolute path required) +* OUTPUT_DIR -- optional, you can specify where the entropy repository will be stored You can also put your .tbz2 file externally built inside `entropy_artifacts/` in your workspace folder (you can create it if not already present) and run `sabayon-createrepo` to generate a repository from them. diff --git a/sabayon-buildpackages b/sabayon-buildpackages index 09da419..09b13a4 100755 --- a/sabayon-buildpackages +++ b/sabayon-buildpackages @@ -4,6 +4,9 @@ SAB_WORKSPACE="${SAB_WORKSPACE:-$PWD}" DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/builder-amd64}" SAB_ARCH="${SAB_ARCH:-intel}" DOCKER_PULL_IMAGE="${DOCKER_PULL_IMAGE:-0}" +MAKE_CONF="${MAKE_CONF:-$SAB_WORKSPACE/specs/make.conf}" +OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/portage_artifacts/}" +LOCAL_OVERLAY="${LOCAL_OVERLAY:-$SAB_WORKSPACE/local_overlay}" . /sbin/sabayondevkit-functions.sh @@ -14,14 +17,7 @@ if [ $# -eq 0 ] fi docker_env=(-e "LC_ALL=en_US.UTF-8") -docker_volumes=(-v "$SAB_WORKSPACE/local_overlay:/usr/local/portage" - -v "$SAB_WORKSPACE/portage_artifacts:/usr/portage/packages" - -v "$SAB_WORKSPACE/specs/custom.unmask:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.unmask/99-custom.unmask" - -v "$SAB_WORKSPACE/specs/custom.mask:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.mask/99-custom.mask" - -v "$SAB_WORKSPACE/specs/custom.use:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.use/99-custom.use" - -v "$SAB_WORKSPACE/specs/custom.env:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.env/99-custom.env" - -v "$SAB_WORKSPACE/specs/custom.keywords:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.keywords/99-custom.keywords" - ) +docker_volumes=( -v "$OUTPUT_DIR:/usr/portage/packages" ) [ -z "$BUILDER_PROFILE" ] || docker_env+=(-e "BUILDER_PROFILE=$BUILDER_PROFILE") [ -z "$BUILDER_JOBS" ] || docker_env+=(-e "BUILDER_JOBS=$BUILDER_JOBS") @@ -32,18 +28,30 @@ docker_volumes=(-v "$SAB_WORKSPACE/local_overlay:/usr/local/portage" [ -z "$EQUO_INSTALL_VERSION" ] || docker_env+=(-e "EQUO_INSTALL_VERSION=$EQUO_INSTALL_VERSION") [ -z "$EQUO_SPLIT_INSTALL" ] || docker_env+=(-e "EQUO_SPLIT_INSTALL=$EQUO_SPLIT_INSTALL") [ -z "$ARTIFACTS_DIR" ] || docker_env+=(-e "ARTIFACTS_DIR=$ARTIFACTS_DIR") +[ -d "$LOCAL_OVERLAY" ] && docker_volumes+=(-v "$LOCAL_OVERLAY:/usr/local/portage") + +if [ -e $MAKE_CONF ]; then + echo "You specified a make.conf. I hope you know what are you doing" + docker_volumes+=(-v "$MAKE_CONF:/etc/portage/make.conf.custom") # file make.conf.custom is in the docker container + docker_env+=(-e "MAKE_CONF=/etc/portage/make.conf.custom") # tell to the builder where is our custom make.conf +fi check_docker_requirements [ $DOCKER_PULL_IMAGE -eq 1 ] && docker pull $DOCKER_IMAGE -[ -d "$SAB_WORKSPACE"/specs ] || mkdir "$SAB_WORKSPACE"/specs/ -[ -e "$SAB_WORKSPACE"/specs/custom.mask ] || touch "$SAB_WORKSPACE"/specs/custom.mask -[ -e "$SAB_WORKSPACE"/specs/custom.unmask ] || touch "$SAB_WORKSPACE"/specs/custom.unmask -[ -e "$SAB_WORKSPACE"/specs/custom.use ] || touch "$SAB_WORKSPACE"/specs/custom.use -[ -e "$SAB_WORKSPACE"/specs/custom.env ] || touch "$SAB_WORKSPACE"/specs/custom.env -[ -e "$SAB_WORKSPACE"/specs/custom.keywords ] || touch "$SAB_WORKSPACE"/specs/custom.keywords +if [ -d "$SAB_WORKSPACE"/specs ]; then + [ -e "$SAB_WORKSPACE"/specs/custom.mask ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.mask:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.mask/99-custom.mask") + [ -e "$SAB_WORKSPACE"/specs/custom.unmask ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.unmask:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.unmask/99-custom.unmask") + [ -e "$SAB_WORKSPACE"/specs/custom.use ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.use:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.use/99-custom.use") + [ -e "$SAB_WORKSPACE"/specs/custom.env ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.env:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.env/99-custom.env") + [ -e "$SAB_WORKSPACE"/specs/custom.keywords ] && docker_volumes+=(-v "$SAB_WORKSPACE/specs/custom.keywords:/opt/sabayon-build/conf/$SAB_ARCH/portage/package.keywords/99-custom.keywords") + +fi + +echo "Spawning the package builder container for '$@'." +echo "" echo "docker run --rm ${docker_env[@]} ${docker_volumes[@]} -ti $DOCKER_IMAGE $@" docker run --rm "${docker_env[@]}" "${docker_volumes[@]}" -ti $DOCKER_IMAGE $@ diff --git a/sabayon-createrepo b/sabayon-createrepo index 37853e5..adef981 100755 --- a/sabayon-createrepo +++ b/sabayon-createrepo @@ -8,6 +8,9 @@ createrepo=$(mktemp) REPOSITORY_NAME="${REPOSITORY_NAME:-default}" REPOSITORY_DESCRIPTION="${REPOSITORY_DESCRIPTION:-My Sabayon repository}" DOCKER_IMAGE="${DOCKER_IMAGE:-sabayon/builder-amd64}" +PORTAGE_ARTIFACTS="${PORTAGE_ARTIFACTS:-$SAB_WORKSPACE/portage_artifacts}" +OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/entropy_artifacts}" + args=("$@") EDITOR=cat @@ -16,17 +19,17 @@ docker_env=(-e "EDITOR=$EDITOR" -e "LC_ALL=en_US.UTF-8") docker_volumes=( - -v "$SAB_WORKSPACE/entropy_artifacts:/sabayon/artifacts" + -v "$OUTPUT_DIR:/sabayon/artifacts" -v "$createrepo:/sabayon/bin/create_repo.sh" -v "$entropysrv:/etc/entropy/server.conf" ) if [ $# -eq 0 ] then - docker_volumes+=(-v "$SAB_WORKSPACE/portage_artifacts:/usr/portage/packages" ) + docker_volumes+=(-v "$PORTAGE_ARTIFACTS:/usr/portage/packages" ) else echo "Packages directory: ${args[0]}" - docker_volumes+=(-v "$SAB_WORKSPACE/${args[0]}:/usr/portage/packages" ) + docker_volumes+=(-v "${args[0]}:/usr/portage/packages" ) fi check_docker_requirements