commit 3d3a37d79f51eaa68b17cc89256c81a59fdcea5d Author: Yorick Barbanneau Date: Thu Jun 3 22:56:13 2021 +0200 First commit For now xserver refuse to compile dues to missing dependencies diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..149f7f9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM debian:bullseye-slim + +RUN apt update \ + && apt install --no-install-recommends -y libext2fs2 \ + mmdebstrap \ + parted \ + multistrap \ + udisks2 \ + qemu-system-aarch64 \ + qemu-user-static \ + binfmt-support \ + arch-test \ + curl \ + bash + +RUN echo "none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0" > /etc/fstab +COPY docker/entrypoint.sh /tmp +COPY src/ /tmp +WORKDIR /tmp +CMD bash +# CMD /tmp/entrypoint.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..85f581f --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +MNT Reform Debian userland creation +----------------------------------- + +This script built an userland "filesystem" for MNT Reform 2 laptop computer. +**Work in Progress**: for now there is some dependencies missing for compiling +xservser. + +## Usage + +``` +make_userland -r -m -o -h +``` + + * `recipe`: recipe to apply, see recipe section below, default:`default` + * `mirroir`: Debian mirror to use, default: `http://ftp.debian.org` + * `output`: output directory, default: `/tmp`, a directory named with recipe + name will be createdin this directory. + +## Recipe + +A recipe is a collection of scripts and attached files inside a subdirectory +of `recipes/`. Theses script are executed into a chroot of the destination +directory by `mmdebstrap` and use its hook system. + +## Docker + +You can find a Dockerfile and an entrypoint script to help you create userland +filesystem. This container is created to work on a x86 machine then you need to +run the container with the `-privileged` parameter. + +First you need to build the container : + +``` +git clone https://git.epha.se/ephase/reform_mkuserland +cd reform_mkuserland +docker build -t reform_make_userland +[...] +``` + +And run it : + +``` +docker run -v /home/docker/output:/output --rm --privileged reform_make_userland +``` + +## Licence + +This work is derivated from MNT script found [here][l_mnt_image] and licenced +under the GPLv3 Licence + +[l_mnt_image]:https://source.mnt.re/reform/reform-system-image/ diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100755 index 0000000..693cb00 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +[[ -z $RECIPE ]] && RECIPE="default" + +sleep 2 +mount -a +echo ':qemu-aarch64:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-aarch64-static:OCF' > /proc/sys/fs/binfmt_misc/register + +if ! ./make_userland.sh -r "$RECIPE" -o /output +then + printf "Error when create userland\n" +fi diff --git a/src/init_target.sh b/src/init_target.sh new file mode 100755 index 0000000..a7d2dea --- /dev/null +++ b/src/init_target.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# populate Debian image +# + +# create a file descriptor for storing log + +exec 3>/tmp/error.log + +function error { + >&2 printf "\e[31mE\e[0m: %s\n" "$1" +} + +erase_display_char () { + local i + local nchar + nchar=$1 + i=0 + + while [ "$i" -lt "$nchar" ]; do + printf "\b \b" + ((i=i + 1)) + done +} + +install_packages () { + local package + package="$1" + + printf "Install %s: " "$package" + apt-get install -y "$package" 2>&3 | while read -r x; do + display="" + pkg_name="" + case $x in + Get*) + pkg_name=$(echo "$x" | awk '{ printf $5 }') + display="downloading $pkg_name" + ;; + Unpack*) + pkg_name=$(echo "$x" | awk '{ printf $2 }') + display="Unpacking $pkg_name" + ;; + *already*newest*) + pkg_name=$(echo "$x" | awk '{ printf $1 }') + display="Already Installed" + break + ;; + esac + if [[ -n "$display" ]] + then + display="$display $pkg_name" + erase_display_char "$nchar" + printf "%s" "$display" + nchar=${#display} + fi + done +} + +SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" +RECIPE_DIR="${SCRIPT_DIR}/recipe" + +[[ ! -d "$RECIPE_DIR" ]] && { error "Recipe dir ${RECIPE_DIR} does not exist"; exit 10; } +export DEBIAN_FRONTEND=noninteractive +export DEBCONF_NONINTERACTIVE_SEEN=true +export LC_ALL=C +export LANGUAGE=C +export LANG=C + +for i in $RECIPE_DIR/*.sh +do + source $i +done + +exit 0 diff --git a/src/make_userland.sh b/src/make_userland.sh new file mode 100755 index 0000000..964e2f9 --- /dev/null +++ b/src/make_userland.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +set -e + +function usage { + + cat < -r -m + + + +. +EOF +} + +function error { + >&2 printf "\e[31mE\e[0m %s\n" "$1" +} + +function clean { + rm -rf "$output" +} + +function process_args { + + while :; do + case $1 in + -h|-\?|--help) + usage + exit 0 + ;; + -r|--recipe) + recipe_name="$2" + shift + ;; + -m|--mirror) + local http_response + http_response=$(curl -o /dev/null -s -L -I -w "%{http_code}\n" "$2") + if [ ! "$http_response" -eq 200 ] + then + error "Mirror $1 seems to have problem." + exit 5 + fi + debian_mirror="$2" + shift + ;; + -o|--output) + if [ ! -d "$2" ] + then + error "output directory $2 not exist." + exit 5 + fi + output_dir=$2 + ;; + *) + break + esac + shift + done +} + +function process_packagefile () { + local packagesfile + local packageslist + packagesfile="$1" + packageslist="$2" + + if [ ! -f "$packagesfile" ] + then + error "Package file $packagesfile not found" + return + fi + while read -r pkg + do + if [[ -z $packageslist ]] + then + packageslist="$pkg" + else + packageslist="${packageslist},${pkg}" + fi + done < "$packagesfile" + printf "%s" "$packageslist" +} + +for c in curl mmdebstrap +do + if ! command -v "$c" >/dev/null + then + error "This script need $c to work properly" + exit 6 + fi +done + +# default values +debian_mirror="http://ftp.debian.org/debian" +output_dir="/tmp" +recipe_name="default" + +process_args "$@" +export RECIPE="recipes/$recipe_name" + +printf "Make userland script, dir:%s recipe:%s" "$(pwd)" "$recipe" + +if [ ! -d "$RECIPE" ] +then + error "recipe folder $RECIPE not found" + usage + exit 2 +fi + +output="$output_dir/$recipe_name" +if [ -f "$output" ] +then + error "$output directory exist, remove it and launch $0 again" + exit 20 +fi +trap clean ERR SIGINT + +include="" +if [ -d "$RECIPE/packages" ] +then + + for f in "$RECIPE"/packages/*.list + do + printf "Add package list for mmdebstrap: %s\n" "$f" + include="$( process_packagefile "$f" "$include")" + done +fi + +if [ -d "$RECIPE"/hook ] +then + hook="--hook-directory=$(pwd)/${RECIPE}/hook" +fi + +command="mmdebstrap --architectures=arm64 --components=main --variant=minbase" + +[[ -n "$include" ]] && command="$command --include=$include" +[[ -n "$hook" ]] && command="$command $hook" +command="$command sid $output $debian_mirror" + +$command || exit 20 + +exit +#mkdir "$output/root/recipe" || exit 21 +# +#cp init_target.sh "$output/root/" || exit 40 +#cp -r "$recipe"/* "$output/root/recipe" || exit 41 +# +#chroot "$output" /root/init_target.sh +# +#exit 0 diff --git a/src/recipes/default/hook/customize.sh b/src/recipes/default/hook/customize.sh new file mode 100755 index 0000000..f595466 --- /dev/null +++ b/src/recipes/default/hook/customize.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +printf "Customize hook script for mmdebstrap %s\n\n" "$RECIPE" + +printf "Add MNT repository and key\n" +chroot $1 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 376511EB67AD7BAF +echo "deb https://mntre.com/reform-debian sid/" | chroot $1 tee /etc/apt/sources.list.d/mntre.list +chroot $1 apt update + +printf "Install MNT packages\n" +chroot $1 apt install -y reform-tools reform-handbook + +source="${RECIPE}/hook/data/overlay" +printf "Sync overlay directory from %s to %s\n" "$source" "$1" +if [ -d $source ] +then + printf " -> source exist\n" + cp -Raf ${RECIPE}/hook/data/overlay/* $1 +else + printf "Can't find %s directory\n" "$source" +fi + +# Procfs is needed to build DRM +mount -t proc /proc $1/proc + +chroot $1 /root/build_script.sh + +exit 0 diff --git a/src/recipes/default/hook/data/overlay/etc/adduser.conf b/src/recipes/default/hook/data/overlay/etc/adduser.conf new file mode 100644 index 0000000..440930c --- /dev/null +++ b/src/recipes/default/hook/data/overlay/etc/adduser.conf @@ -0,0 +1,85 @@ +# /etc/adduser.conf: `adduser' configuration. +# See adduser(8) and adduser.conf(5) for full documentation. + +# The DSHELL variable specifies the default login shell on your +# system. +DSHELL=/bin/bash + +# The DHOME variable specifies the directory containing users' home +# directories. +DHOME=/home + +# If GROUPHOMES is "yes", then the home directories will be created as +# /home/groupname/user. +GROUPHOMES=no + +# If LETTERHOMES is "yes", then the created home directories will have +# an extra directory - the first letter of the user name. For example: +# /home/u/user. +LETTERHOMES=no + +# The SKEL variable specifies the directory containing "skeletal" user +# files; in other words, files such as a sample .profile that will be +# copied to the new user's home directory when it is created. +SKEL=/etc/skel + +# FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for UIDs +# for dynamically allocated administrative and system accounts/groups. +# Please note that system software, such as the users allocated by the base-passwd +# package, may assume that UIDs less than 100 are unallocated. +FIRST_SYSTEM_UID=100 +LAST_SYSTEM_UID=999 + +FIRST_SYSTEM_GID=100 +LAST_SYSTEM_GID=999 + +# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically +# allocated user accounts/groups. +FIRST_UID=1000 +LAST_UID=59999 + +FIRST_GID=1000 +LAST_GID=59999 + +# The USERGROUPS variable can be either "yes" or "no". If "yes" each +# created user will be given their own group to use as a default. If +# "no", each created user will be placed in the group whose gid is +# USERS_GID (see below). +USERGROUPS=yes + +# If USERGROUPS is "no", then USERS_GID should be the GID of the group +# `users' (or the equivalent group) on your system. +USERS_GID=100 + +# If DIR_MODE is set, directories will be created with the specified +# mode. Otherwise the default mode 0755 will be used. +DIR_MODE=0755 + +# If SETGID_HOME is "yes" home directories for users with their own +# group the setgid bit will be set. This was the default for +# versions << 3.13 of adduser. Because it has some bad side effects we +# no longer do this per default. If you want it nevertheless you can +# still set it here. +SETGID_HOME=no + +# If QUOTAUSER is set, a default quota will be set from that user with +# `edquota -p QUOTAUSER newuser' +QUOTAUSER="" + +# If SKEL_IGNORE_REGEX is set, adduser will ignore files matching this +# regular expression when creating a new home directory +SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)" + +# Set this if you want the --add_extra_groups option to adduser to add +# new users to other groups. +# This is the list of groups that new non-system users will be added to +# Default: +EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users" + +# If ADD_EXTRA_GROUPS is set to something non-zero, the EXTRA_GROUPS +# option above will be default behavior for adding new, non-system users +ADD_EXTRA_GROUPS=1 + + +# check user and group names also against this regular expression. +#NAME_REGEX="^[a-z][-a-z0-9_]*\$" diff --git a/src/recipes/default/hook/data/overlay/etc/dhcp/dhclient.conf b/src/recipes/default/hook/data/overlay/etc/dhcp/dhclient.conf new file mode 100644 index 0000000..865f162 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/etc/dhcp/dhclient.conf @@ -0,0 +1,54 @@ +# Configuration file for /sbin/dhclient. +# +# This is a sample configuration file for dhclient. See dhclient.conf's +# man page for more information about the syntax of this file +# and a more comprehensive list of the parameters understood by +# dhclient. +# +# Normally, if the DHCP server provides reasonable information and does +# not leave anything out (like the domain name, for example), then +# few changes must be made to this file, if any. +# + +option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; + +send host-name = gethostname(); +request subnet-mask, broadcast-address, time-offset, routers, + domain-name, domain-name-servers, domain-search, host-name, + dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, + netbios-name-servers, netbios-scope, interface-mtu, + rfc3442-classless-static-routes, ntp-servers; + +#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c; +#send dhcp-lease-time 3600; +#supersede domain-name "fugue.com home.vix.com"; +#prepend domain-name-servers 127.0.0.1; +#require subnet-mask, domain-name-servers; +timeout 5; +#retry 60; +#reboot 10; +#select-timeout 5; +#initial-interval 2; +#script "/sbin/dhclient-script"; +#media "-link0 -link1 -link2", "link0 link1"; +#reject 192.33.137.209; + +#alias { +# interface "eth0"; +# fixed-address 192.5.5.213; +# option subnet-mask 255.255.255.255; +#} + +#lease { +# interface "eth0"; +# fixed-address 192.33.137.200; +# medium "link0 link1"; +# option host-name "andare.swiftmedia.com"; +# option subnet-mask 255.255.255.0; +# option broadcast-address 192.33.137.255; +# option routers 192.33.137.250; +# option domain-name-servers 127.0.0.1; +# renew 2 2000/1/12 00:00:01; +# rebind 2 2000/1/12 00:00:01; +# expire 2 2000/1/12 00:00:01; +#} diff --git a/src/recipes/default/hook/data/overlay/etc/hostname b/src/recipes/default/hook/data/overlay/etc/hostname new file mode 100644 index 0000000..4010da7 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/etc/hostname @@ -0,0 +1,2 @@ +reform + diff --git a/src/recipes/default/hook/data/overlay/etc/hosts b/src/recipes/default/hook/data/overlay/etc/hosts new file mode 100644 index 0000000..6cf6b00 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/etc/hosts @@ -0,0 +1,4 @@ +127.0.0.1 localhost reform +::1 localhost ip6-localhost ip6-loopback reform +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters diff --git a/src/recipes/default/hook/data/overlay/etc/ld.so.conf b/src/recipes/default/hook/data/overlay/etc/ld.so.conf new file mode 100644 index 0000000..ddbd34d --- /dev/null +++ b/src/recipes/default/hook/data/overlay/etc/ld.so.conf @@ -0,0 +1,4 @@ +/usr/local/lib +/usr/local/lib/dri + +include /etc/ld.so.conf.d/*.conf diff --git a/src/recipes/default/hook/data/overlay/etc/motd b/src/recipes/default/hook/data/overlay/etc/motd new file mode 100644 index 0000000..863dd24 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/etc/motd @@ -0,0 +1,14 @@ +%G + + ▒ ▒ ▒ + ██▒ ██▒ ██▒ Welcome to Debian GNU/Linux + ████▒ ████▒ ████▒ ██████▒ on MNT Reform + ██████▒ ██████▒ ██████▒ ██████▒ System Image: 2021-03-04 + ███████████████████████████ + ███▒███████▒███████▒███████ https://mntre.com/reform + ███ ▒█████ ▒█████ ▒█████ https://www.debian.org + ▒███ ▒███ ▒███ + ▒█ ▒█ ▒█ ████████████████████████ + + + diff --git a/src/recipes/default/hook/data/overlay/etc/resolv.conf b/src/recipes/default/hook/data/overlay/etc/resolv.conf new file mode 100644 index 0000000..cae093a --- /dev/null +++ b/src/recipes/default/hook/data/overlay/etc/resolv.conf @@ -0,0 +1 @@ +nameserver 8.8.8.8 diff --git a/src/recipes/default/hook/data/overlay/etc/systemd/reform-hw-setup.service b/src/recipes/default/hook/data/overlay/etc/systemd/reform-hw-setup.service new file mode 100644 index 0000000..e355c4f --- /dev/null +++ b/src/recipes/default/hook/data/overlay/etc/systemd/reform-hw-setup.service @@ -0,0 +1,11 @@ +[Unit] +Description=MNT Reform Hardware Defaults Setup + +[Service] +Type=oneshot +ExecStart=/usr/sbin/reform-hw-setup.sh +StandardOutput=journal + +[Install] +WantedBy=sysinit.target + diff --git a/src/recipes/default/hook/data/overlay/root/build_script.sh b/src/recipes/default/hook/data/overlay/root/build_script.sh new file mode 100755 index 0000000..53a321d --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/build_script.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +exec 3>/tmp/build_error.log + +function error { + >&2 printf "\e[31mE\e[0m: %s\n" "$1" +} + +function get_current_dir { + # this function return the absolute path of the script + + local script_path + script_path="$(dirname $0)" + + # If the path begin with /, this is an absolute part + if [[ "$script_path" =~ ^/[[:graph:]]*$ ]] + then + printf "%s" "$script_path" + return + fi + + local current_path + current_path="$(pwd)" + if [[ $script_path == "." ]] + then + script_path="" + elif [[ $script_path =~ ^./[[:graph:]]*$ ]] + then + script_path=${script_path##./} + echo " $current_path trad: $script_path" + else + while [[ $script_path =~ ^../[[:graph:]]*$ ]] + do + script_path="${script_path##../}" + current_path="${current_path%/*}" + done + fi + printf "%s/%s" "${current_path}" "${script_path}" + +} + +current_dir=$(get_current_dir) +scripts_dir="${current_dir}/scripts" + +for script in ${scripts_dir}/*.sh +do + source $script + printf "\nBuilding %s\n" "$name" + printf " >> cloning repository\n" + $clone_command 2>&3 || { + error "Error when cloning $name" + exit 1 + } + post_clone_hook + + cd $clone_directory + if [[ ! $patches_dir == 0 ]] + then + printf " >> patching\n" + for patch in ${current_dir}/${patches_dir}/* + do + printf " > patchfile: %s" "$patch" + patch -p1 < "$patch" || { + error "Error whan applying patch, check log\n"; + exit 1; + } + done + fi + + printf " >> configure\n" + $configure_command 2>&3 1>/dev/null|| { + error "Error when configuring $name, command: $configure_command" + exit 1 + } + post_configure_hook + + printf " >> Build and install\n" + $build_command 2>&3 || { + error "Error when buildind and installing $name, command: $build_command" + exit 1 + } + cd .. + post_install_hook +done +exit 0 diff --git a/src/recipes/default/hook/data/overlay/root/mesa_patches/7603.patch b/src/recipes/default/hook/data/overlay/root/mesa_patches/7603.patch new file mode 100644 index 0000000..37b8618 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/mesa_patches/7603.patch @@ -0,0 +1,436 @@ +From 96106df17897b862b87937d6222a3e6483f45480 Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Fri, 13 Nov 2020 14:26:23 +0100 +Subject: [PATCH 1/6] frontend/dri: copy image use in dup_image + +Don't lose the use flags when dup'ing an image. + +Signed-off-by: Lucas Stach +--- + src/gallium/frontends/dri/dri2.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c +index 0c0168497a2..1cd42cd8114 100644 +--- a/src/gallium/frontends/dri/dri2.c ++++ b/src/gallium/frontends/dri/dri2.c +@@ -1308,6 +1308,7 @@ dri2_dup_image(__DRIimage *image, void *loaderPrivate) + img->dri_format = image->dri_format; + /* This should be 0 for sub images, but dup is also used for base images. */ + img->dri_components = image->dri_components; ++ img->use = image->use; + img->loader_private = loaderPrivate; + + return img; +-- +GitLab + + +From 00add4be8620175ccc69869e22479962dacdce9d Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Fri, 13 Nov 2020 14:38:41 +0100 +Subject: [PATCH 2/6] dri: bring back use flags for createImageWithModifiers + +createImageWithModifiers dropped the use flags that were present with +the createImage interface as it was believed at the time that all those +use flags could be expressed as a modifier. This turned out to be untrue, +as there are some use flags like SCANOUT and the BACKBUFFER hint that +won't ever get a eqivalent modifier expression. + +Signed-off-by: Lucas Stach +--- + include/GL/internal/dri_interface.h | 1 + + src/egl/drivers/dri2/platform_wayland.c | 4 ++-- + src/gallium/frontends/dri/dri2.c | 5 ++--- + src/gbm/backends/dri/gbm_dri.c | 2 +- + src/loader/loader_dri3_helper.c | 3 +++ + src/mesa/drivers/dri/i965/intel_screen.c | 2 +- + 6 files changed, 10 insertions(+), 7 deletions(-) + +diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h +index 39d5dd07533..222821428d0 100644 +--- a/include/GL/internal/dri_interface.h ++++ b/include/GL/internal/dri_interface.h +@@ -1678,6 +1678,7 @@ struct __DRIimageExtensionRec { + int width, int height, int format, + const uint64_t *modifiers, + const unsigned int modifier_count, ++ unsigned int use, + void *loaderPrivate); + + /* +diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c +index c0b26c4b623..bb508cbe421 100644 +--- a/src/egl/drivers/dri2/platform_wayland.c ++++ b/src/egl/drivers/dri2/platform_wayland.c +@@ -595,7 +595,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) + dri2_surf->base.Height, + linear_dri_image_format, + &linear_mod, +- 1, ++ 1, use_flags, + NULL); + } else { + dri2_surf->back->linear_copy = +@@ -624,7 +624,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) + dri2_surf->base.Height, + dri_image_format, + modifiers, +- num_modifiers, ++ num_modifiers, use_flags, + NULL); + } else { + dri2_surf->back->dri_image = +diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c +index 1cd42cd8114..1f1e7a9a65e 100644 +--- a/src/gallium/frontends/dri/dri2.c ++++ b/src/gallium/frontends/dri/dri2.c +@@ -1074,12 +1074,11 @@ static __DRIimage * + dri2_create_image_with_modifiers(__DRIscreen *dri_screen, + int width, int height, int format, + const uint64_t *modifiers, +- const unsigned count, ++ const unsigned count, unsigned int use, + void *loaderPrivate) + { + return dri2_create_image_common(dri_screen, width, height, format, +- __DRI_IMAGE_USE_SHARE, modifiers, count, +- loaderPrivate); ++ use, modifiers, count, loaderPrivate); + } + + static bool +diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c +index b5634741554..aff3a107e7d 100644 +--- a/src/gbm/backends/dri/gbm_dri.c ++++ b/src/gbm/backends/dri/gbm_dri.c +@@ -1173,7 +1173,7 @@ gbm_dri_bo_create(struct gbm_device *gbm, + width, height, + dri_format, + modifiers, count, +- bo); ++ dri_use, bo); + + if (bo->image) { + /* The client passed in a list of invalid modifiers */ +diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c +index ccf8d1795e7..6fc6a2b705a 100644 +--- a/src/loader/loader_dri3_helper.c ++++ b/src/loader/loader_dri3_helper.c +@@ -1407,6 +1407,9 @@ dri3_alloc_render_buffer(struct loader_dri3_drawable *draw, unsigned int format, + format, + modifiers, + count, ++ __DRI_IMAGE_USE_SHARE | ++ __DRI_IMAGE_USE_SCANOUT | ++ __DRI_IMAGE_USE_BACKBUFFER, + buffer); + } + +diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c +index 4492d43c040..4511b962eef 100644 +--- a/src/mesa/drivers/dri/i965/intel_screen.c ++++ b/src/mesa/drivers/dri/i965/intel_screen.c +@@ -893,7 +893,7 @@ static __DRIimage * + intel_create_image_with_modifiers(__DRIscreen *dri_screen, + int width, int height, int format, + const uint64_t *modifiers, +- const unsigned count, ++ const unsigned count, unsigned int use, + void *loaderPrivate) + { + return intel_create_image_common(dri_screen, width, height, format, 0, +-- +GitLab + + +From 587aac46dbadf2aca1489aadd4216e592e11e17b Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Fri, 13 Nov 2020 14:59:52 +0100 +Subject: [PATCH 3/6] frontend/dri: add EXPLICIT_FLUSH hint in + dri2_resource_get_param + +dri2_resource_get_param() is called from two different places right now. +Only one of them adds the EXPLICIT_FLUSH hint to the handle usage, which +may disable the optimizations provided by this hint without a reason. + +Make sure to always add this hint when appropriate. + +Signed-off-by: Lucas Stach +--- + src/gallium/frontends/dri/dri2.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c +index 1f1e7a9a65e..7851ebceb3e 100644 +--- a/src/gallium/frontends/dri/dri2.c ++++ b/src/gallium/frontends/dri/dri2.c +@@ -1198,6 +1198,9 @@ dri2_resource_get_param(__DRIimage *image, enum pipe_resource_param param, + if (!pscreen->resource_get_param) + return false; + ++ if (image->use & __DRI_IMAGE_USE_BACKBUFFER) ++ handle_usage |= PIPE_HANDLE_USAGE_EXPLICIT_FLUSH; ++ + return pscreen->resource_get_param(pscreen, NULL, image->texture, + image->plane, 0, 0, param, handle_usage, + value); +@@ -1242,9 +1245,6 @@ dri2_query_image_by_resource_param(__DRIimage *image, int attrib, int *value) + + handle_usage = PIPE_HANDLE_USAGE_FRAMEBUFFER_WRITE; + +- if (image->use & __DRI_IMAGE_USE_BACKBUFFER) +- handle_usage |= PIPE_HANDLE_USAGE_EXPLICIT_FLUSH; +- + if (!dri2_resource_get_param(image, param, handle_usage, &res_param)) + return false; + +-- +GitLab + + +From 59f74212bbb5e28badd0775929e42856c9a01d35 Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Fri, 13 Nov 2020 15:03:37 +0100 +Subject: [PATCH 4/6] etnaviv: remove double assigment of surface->texture + +surf->base.texture is already assigned earlier via a proper +pipe_resource_reference call. Remove the superfluous assignement. + +Signed-off-by: Lucas Stach +Reviewed-by: Christian Gmeiner +--- + src/gallium/drivers/etnaviv/etnaviv_surface.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/gallium/drivers/etnaviv/etnaviv_surface.c b/src/gallium/drivers/etnaviv/etnaviv_surface.c +index c78973bdb09..52a937652d2 100644 +--- a/src/gallium/drivers/etnaviv/etnaviv_surface.c ++++ b/src/gallium/drivers/etnaviv/etnaviv_surface.c +@@ -112,7 +112,6 @@ etna_create_surface(struct pipe_context *pctx, struct pipe_resource *prsc, + etna_screen_resource_alloc_ts(pctx->screen, rsc); + } + +- surf->base.texture = &rsc->base; + surf->base.format = templat->format; + surf->base.width = rsc->levels[level].width; + surf->base.height = rsc->levels[level].height; +-- +GitLab + + +From 570908323e02c4558f5a9abc2d82621056cd65ab Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Tue, 17 Nov 2020 12:08:13 +0100 +Subject: [PATCH 5/6] etnaviv: compact etna_state_updates + +Just reclaim a bit of screen real estate, purely cosmetic change. + +Signed-off-by: Lucas Stach +--- + src/gallium/drivers/etnaviv/etnaviv_state.c | 18 ++++++------------ + 1 file changed, 6 insertions(+), 12 deletions(-) + +diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c b/src/gallium/drivers/etnaviv/etnaviv_state.c +index 1b4a7040b50..84fea58ecb5 100644 +--- a/src/gallium/drivers/etnaviv/etnaviv_state.c ++++ b/src/gallium/drivers/etnaviv/etnaviv_state.c +@@ -749,24 +749,18 @@ struct etna_state_updater { + static const struct etna_state_updater etna_state_updates[] = { + { + etna_shader_update_vertex, ETNA_DIRTY_SHADER | ETNA_DIRTY_VERTEX_ELEMENTS, +- }, +- { ++ }, { + etna_shader_link, ETNA_DIRTY_SHADER, +- }, +- { ++ }, { + etna_update_blend, ETNA_DIRTY_BLEND | ETNA_DIRTY_FRAMEBUFFER +- }, +- { ++ }, { + etna_update_blend_color, ETNA_DIRTY_BLEND_COLOR | ETNA_DIRTY_FRAMEBUFFER, +- }, +- { ++ }, { + etna_update_ts_config, ETNA_DIRTY_DERIVE_TS, +- }, +- { ++ }, { + etna_update_clipping, ETNA_DIRTY_SCISSOR | ETNA_DIRTY_FRAMEBUFFER | + ETNA_DIRTY_RASTERIZER | ETNA_DIRTY_VIEWPORT, +- }, +- { ++ }, { + etna_update_zsa, ETNA_DIRTY_ZSA | ETNA_DIRTY_SHADER, + } + }; +-- +GitLab + + +From 537c7a6ea3fd2e5a6433e52b406ba39b89f520d9 Mon Sep 17 00:00:00 2001 +From: Lucas Stach +Date: Fri, 13 Nov 2020 15:05:55 +0100 +Subject: [PATCH 6/6] etnaviv: flush used render buffers on context flush when + neccessary + +Some resources like backbuffers are explicitly flushed by the frontend +at the appropriate time, others however won't get flushed explicitly. +Remember those resources when they get emitted as a render buffer and +flush them on a context flush to make their content visible to other +entities sharing the buffer. + +We still keep the optimized path for most resources where the frontend +promises to do the flushing for us and only enable implicit flushing +when a buffer handle is exported/imported without the +PIPE_HANDLE_USAGE_EXPLICIT_FLUSH flag set. + +Signed-off-by: Lucas Stach +--- + src/gallium/drivers/etnaviv/etnaviv_context.c | 16 ++++++++++++++++ + src/gallium/drivers/etnaviv/etnaviv_context.h | 3 +++ + src/gallium/drivers/etnaviv/etnaviv_resource.c | 7 +++++++ + src/gallium/drivers/etnaviv/etnaviv_resource.h | 2 ++ + src/gallium/drivers/etnaviv/etnaviv_state.c | 17 +++++++++++++++++ + 5 files changed, 45 insertions(+) + +diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.c b/src/gallium/drivers/etnaviv/etnaviv_context.c +index 9c334a450c6..80c5d430419 100644 +--- a/src/gallium/drivers/etnaviv/etnaviv_context.c ++++ b/src/gallium/drivers/etnaviv/etnaviv_context.c +@@ -128,6 +128,9 @@ etna_context_destroy(struct pipe_context *pctx) + _mesa_set_destroy(ctx->used_resources_write, NULL); + + } ++ if (ctx->flush_resources) ++ _mesa_set_destroy(ctx->flush_resources, NULL); ++ + mtx_unlock(&ctx->lock); + + if (ctx->dummy_desc_bo) +@@ -475,6 +478,14 @@ etna_flush(struct pipe_context *pctx, struct pipe_fence_handle **fence, + list_for_each_entry(struct etna_acc_query, aq, &ctx->active_acc_queries, node) + etna_acc_query_suspend(aq, ctx); + ++ /* flush all resources that need an implicit flush */ ++ set_foreach(ctx->flush_resources, entry) { ++ struct pipe_resource *prsc = (struct pipe_resource *)entry->key; ++ ++ pctx->flush_resource(pctx, prsc); ++ } ++ _mesa_set_clear(ctx->flush_resources, NULL); ++ + etna_cmd_stream_flush(ctx->stream, ctx->in_fence_fd, + (flags & PIPE_FLUSH_FENCE_FD) ? &out_fence_fd : NULL); + +@@ -581,6 +592,11 @@ etna_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags) + if (!ctx->used_resources_write) + goto fail; + ++ ctx->flush_resources = _mesa_set_create(NULL, _mesa_hash_pointer, ++ _mesa_key_pointer_equal); ++ if (!ctx->flush_resources) ++ goto fail; ++ + mtx_init(&ctx->lock, mtx_recursive); + + /* context ctxate setup */ +diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.h b/src/gallium/drivers/etnaviv/etnaviv_context.h +index dd6af3d93e6..112902aac8a 100644 +--- a/src/gallium/drivers/etnaviv/etnaviv_context.h ++++ b/src/gallium/drivers/etnaviv/etnaviv_context.h +@@ -206,6 +206,9 @@ struct etna_context { + struct set *used_resources_read; + struct set *used_resources_write; + ++ /* resources that must be flushed implicitly at the context flush time */ ++ struct set *flush_resources; ++ + mtx_t lock; + }; + +diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.c b/src/gallium/drivers/etnaviv/etnaviv_resource.c +index ae4f24b9b44..0c8c28e66aa 100644 +--- a/src/gallium/drivers/etnaviv/etnaviv_resource.c ++++ b/src/gallium/drivers/etnaviv/etnaviv_resource.c +@@ -265,6 +265,7 @@ etna_resource_alloc(struct pipe_screen *pscreen, unsigned layout, + rsc->base.nr_samples = nr_samples; + rsc->layout = layout; + rsc->halign = halign; ++ rsc->explicit_flush = true; + + pipe_reference_init(&rsc->base.reference, 1); + util_range_init(&rsc->valid_buffer_range); +@@ -519,6 +520,9 @@ etna_resource_from_handle(struct pipe_screen *pscreen, + rsc->layout = modifier_to_layout(handle->modifier); + rsc->halign = TEXTURE_HALIGN_FOUR; + ++ if (usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH) ++ rsc->explicit_flush = true; ++ + level->width = tmpl->width0; + level->height = tmpl->height0; + level->depth = tmpl->depth0; +@@ -584,6 +588,9 @@ etna_resource_get_handle(struct pipe_screen *pscreen, + handle->offset = rsc->levels[0].offset; + handle->modifier = layout_to_modifier(rsc->layout); + ++ if (!(usage & PIPE_HANDLE_USAGE_EXPLICIT_FLUSH)) ++ rsc->explicit_flush = false; ++ + if (handle->type == WINSYS_HANDLE_TYPE_SHARED) { + return etna_bo_get_name(rsc->bo, &handle->handle) == 0; + } else if (handle->type == WINSYS_HANDLE_TYPE_KMS) { +diff --git a/src/gallium/drivers/etnaviv/etnaviv_resource.h b/src/gallium/drivers/etnaviv/etnaviv_resource.h +index cb83e891d34..167cf4ed069 100644 +--- a/src/gallium/drivers/etnaviv/etnaviv_resource.h ++++ b/src/gallium/drivers/etnaviv/etnaviv_resource.h +@@ -93,6 +93,8 @@ struct etna_resource { + struct pipe_resource *texture; + /* for when PE doesn't support the base layout */ + struct pipe_resource *render; ++ /* frontend flushes resource via an explicit call to flush_resource */ ++ bool explicit_flush; + + enum etna_resource_status status; + +diff --git a/src/gallium/drivers/etnaviv/etnaviv_state.c b/src/gallium/drivers/etnaviv/etnaviv_state.c +index 84fea58ecb5..5848735ab14 100644 +--- a/src/gallium/drivers/etnaviv/etnaviv_state.c ++++ b/src/gallium/drivers/etnaviv/etnaviv_state.c +@@ -741,6 +741,21 @@ etna_update_zsa(struct etna_context *ctx) + return true; + } + ++static bool ++etna_record_flush_resources(struct etna_context *ctx) ++{ ++ struct pipe_framebuffer_state *fb = &ctx->framebuffer_s; ++ ++ if (fb->nr_cbufs > 0) { ++ struct etna_surface *surf = etna_surface(fb->cbufs[0]); ++ ++ if (!etna_resource(surf->prsc)->explicit_flush) ++ _mesa_set_add(ctx->flush_resources, surf->prsc); ++ } ++ ++ return true; ++} ++ + struct etna_state_updater { + bool (*update)(struct etna_context *ctx); + uint32_t dirty; +@@ -762,6 +777,8 @@ static const struct etna_state_updater etna_state_updates[] = { + ETNA_DIRTY_RASTERIZER | ETNA_DIRTY_VIEWPORT, + }, { + etna_update_zsa, ETNA_DIRTY_ZSA | ETNA_DIRTY_SHADER, ++ }, { ++ etna_record_flush_resources, ETNA_DIRTY_FRAMEBUFFER, + } + }; + +-- +GitLab + diff --git a/src/recipes/default/hook/data/overlay/root/mesa_patches/disable_msaa.patch b/src/recipes/default/hook/data/overlay/root/mesa_patches/disable_msaa.patch new file mode 100644 index 0000000..6bf7399 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/mesa_patches/disable_msaa.patch @@ -0,0 +1,12 @@ +--- a/src/gallium/drivers/etnaviv/etnaviv_screen.c ++++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c +@@ -445,6 +445,10 @@ etna_screen_is_format_supported(struct pipe_screen *pscreen, + struct etna_screen *screen = etna_screen(pscreen); + unsigned allowed = 0; + ++ /* HACK to disable all MSAA, as is causes GPU crashes */ ++ if (sample_count > 1) ++ return false; ++ + if (!gpu_supports_texture_target(screen, target)) + return false; diff --git a/src/recipes/default/hook/data/overlay/root/scripts/10.drm.sh b/src/recipes/default/hook/data/overlay/root/scripts/10.drm.sh new file mode 100644 index 0000000..847231e --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/10.drm.sh @@ -0,0 +1,19 @@ +name="DRM" +patches_dir=0 +clone_directory="drm" +clone_command="git clone --depth 1 https://gitlab.freedesktop.org/mesa/drm.git" +configure_command="meson build -Detnaviv=true -Dradeon=false -Damdgpu=false -Dvmwgfx=false -Dfreedreno=false -Dvc4=false -Dnouveau=false" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + return +} + +function post_configure_hook { + return +} + +function post_install_hook { + ldconfig +} diff --git a/src/recipes/default/hook/data/overlay/root/scripts/11.mesa.sh b/src/recipes/default/hook/data/overlay/root/scripts/11.mesa.sh new file mode 100644 index 0000000..2f2f725 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/11.mesa.sh @@ -0,0 +1,19 @@ +name="MESA" +patches_dir="mesa_patches" +clone_directory="mesa" +clone_command="git clone --depth 1 --branch mesa-20.3.4 https://gitlab.freedesktop.org/mesa/mesa.git" +configure_command="meson build -Dplatforms=x11,wayland -Ddri3=true -Dgallium-drivers=swrast,etnaviv,kmsro,virgl -Dgbm=enabled -Degl=enabled -Dbuildtype=release -Db_ndebug=true" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + return +} + +function post_configure_hook { + return +} + +function post_install_hook { + ldconfig +} diff --git a/src/recipes/default/hook/data/overlay/root/scripts/20.wayland.sh b/src/recipes/default/hook/data/overlay/root/scripts/20.wayland.sh new file mode 100644 index 0000000..a28915f --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/20.wayland.sh @@ -0,0 +1,19 @@ +name="Wayland" +patches_dir=0 +clone_directory="wayland" +clone_command="git clone --depth 1 https://github.com/wayland-project/wayland.git" +configure_command="meson build -Ddocumentation=false" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + return +} + +function post_configure_hook { + return +} + +function post_install_hook { + ldconfig +} diff --git a/src/recipes/default/hook/data/overlay/root/scripts/21.wlroots.sh b/src/recipes/default/hook/data/overlay/root/scripts/21.wlroots.sh new file mode 100644 index 0000000..031e408 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/21.wlroots.sh @@ -0,0 +1,19 @@ +name="wlroots" +patches_dir=0 +clone_directory="wlroots" +clone_command="git clone --depth 1 --branch=0.12.0 https://github.com/swaywm/wlroots.git" +configure_command="meson build" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + return +} + +function post_configure_hook { + return +} + +function post_install_hook { + ldconfig +} diff --git a/src/recipes/default/hook/data/overlay/root/scripts/22.sway.sh b/src/recipes/default/hook/data/overlay/root/scripts/22.sway.sh new file mode 100644 index 0000000..101ddcf --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/22.sway.sh @@ -0,0 +1,19 @@ +name="sway" +patches_dir=0 +clone_directory="sway" +clone_command="git clone --depth 1 --branch=1.5.1 https://github.com/swaywm/sway.git" +configure_command="meson build" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + return +} + +function post_configure_hook { + return +} + +function post_install_hook { + chmod +s /usr/local/bin/sway +} diff --git a/src/recipes/default/hook/data/overlay/root/scripts/23.xserver.sh b/src/recipes/default/hook/data/overlay/root/scripts/23.xserver.sh new file mode 100644 index 0000000..7cc9259 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/23.xserver.sh @@ -0,0 +1,21 @@ +name="xserver" +patches_dir="xserver_patches" +clone_directory="xserver" +clone_command="git clone --depth 1 --branch-xorg-server-1.20.11 https://gitlab.freedesktop.org/xorg/xserver.git" +configure_command="meson build -Dxorg=true -Dxwayland=true -Dglamor=true -Dxwayland_eglstream=false -Dxnest=false -Ddmx=false -Dxvfb=true -Dxwin=false -Dxephyr=false -Ddri3=true" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + return +} + +function post_configure_hook { + return +} + +function post_install_hook { + # overwrite /usr/bin/Xwayland with symlink to our Xwayland (FIXME: brittle) + rm -f /usr/bin/Xwayland + ln -s /usr/local/bin/Xwayland /usr/bin/Xwayland +} diff --git a/src/recipes/default/hook/data/overlay/root/scripts/30.waybar.sh b/src/recipes/default/hook/data/overlay/root/scripts/30.waybar.sh new file mode 100644 index 0000000..51112e5 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/30.waybar.sh @@ -0,0 +1,19 @@ +name="Waybar" +patches_dir=0 +clone_directory="Waybar" +clone_command="git clone --depth 1 https://github.com/Alexays/Waybar.git" +configure_command="meson build" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + return +} + +function post_configure_hook { + return +} + +function post_install_hook { + return +} diff --git a/src/recipes/default/hook/data/overlay/root/scripts/31.wayvnc.sh b/src/recipes/default/hook/data/overlay/root/scripts/31.wayvnc.sh new file mode 100644 index 0000000..8e29728 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/31.wayvnc.sh @@ -0,0 +1,32 @@ +name="WayVNC" +patches_dir=0 +clone_directory="Waybar" +clone_command="git clone --depth 1 https://github.com/any1/wayvnc.git" +configure_command="meson build" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + printf " >> post-clone hook : clone subproject\n" + cd $clone_directory + mkdir subprojects + cd subprojects + git clone https://github.com/any1/neatvnc.git 1>/dev/null || { + error "Error when cloning netvnc.\n"; + exit 1; + } + + git clone https://github.com/any1/aml.git 1>/dev/null || { + error "Error when cloning aml.\n"; + exit 1; + } + cd .. +} + +function post_configure_hook { + return +} + +function post_install_hook { + return +} diff --git a/src/recipes/default/hook/data/overlay/root/scripts/32.cage.sh b/src/recipes/default/hook/data/overlay/root/scripts/32.cage.sh new file mode 100644 index 0000000..c576616 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/scripts/32.cage.sh @@ -0,0 +1,19 @@ +name="Cage" +patches_dir=0 +clone_directory="cage" +clone_command="git clone --depth 1 https://github.com/Hjdskes/cage.git" +configure_command="meson build" +build_command="ninja -C build install" + +## Hooks +function post_clone_hook { + return +} + +function post_configure_hook { + return +} + +function post_install_hook { + return +} diff --git a/src/recipes/default/hook/data/overlay/root/xserver_patches/glamor_render.patch b/src/recipes/default/hook/data/overlay/root/xserver_patches/glamor_render.patch new file mode 100644 index 0000000..530e49e --- /dev/null +++ b/src/recipes/default/hook/data/overlay/root/xserver_patches/glamor_render.patch @@ -0,0 +1,13 @@ +diff --git a/glamor/glamor_render.c b/glamor/glamor_render.c +index be0741a..1dd2876 100644 +--- a/glamor/glamor_render.c ++++ b/glamor/glamor_render.c +@@ -1584,6 +1584,8 @@ glamor_composite_clipped_region(CARD8 op, + if (prect != rect) + free(prect); + out: ++ glFinish(); ++ + if (temp_src != source) + FreePicture(temp_src, 0); + if (temp_mask != mask) diff --git a/src/recipes/default/hook/data/overlay/usr/share/pulseaudio/alsa-mixer/path/analog-input-reform.conf b/src/recipes/default/hook/data/overlay/usr/share/pulseaudio/alsa-mixer/path/analog-input-reform.conf new file mode 100644 index 0000000..e2147f0 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/usr/share/pulseaudio/alsa-mixer/path/analog-input-reform.conf @@ -0,0 +1,98 @@ +# This file is part of PulseAudio. +# +# PulseAudio is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# PulseAudio is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with PulseAudio; if not, see . + +; Analog input path for MNT Reform, which has a headset mic input +; that is only on the left channel (mono). + +[General] +priority = 100 + +[Element Capture] +switch = mute +volume = ignore + +[Element Mic] +required-absent = any + +[Element Mic Boost] +required-absent = any + +[Element Dock Mic] +required-absent = any + +[Element Dock Mic Boost] +required-absent = any + +[Element Front Mic] +required-absent = any + +[Element Front Mic Boost] +required-absent = any + +[Element Int Mic] +required-absent = any + +[Element Int Mic Boost] +required-absent = any + +[Element Internal Mic] +required-absent = any + +[Element Internal Mic Boost] +required-absent = any + +[Element Rear Mic] +required-absent = any + +[Element Rear Mic Boost] +required-absent = any + +[Element Headset] +required-absent = any + +[Element Headset Mic] +required-absent = any + +[Element Headset Mic Boost] +required-absent = any + +[Element Headphone Mic] +required-absent = any + +[Element Headphone Mic Boost] +required-absent = any + +[Element Line] +required-absent = any + +[Element Line Boost] +required-absent = any + +[Element Aux] +required-absent = any + +[Element Video] +required-absent = any + +[Element Mic/Line] +required-absent = any + +[Element TV Tuner] +required-absent = any + +[Element FM] +required-absent = any + +.include analog-input.conf.common diff --git a/src/recipes/default/hook/data/overlay/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf b/src/recipes/default/hook/data/overlay/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf new file mode 100644 index 0000000..603aab1 --- /dev/null +++ b/src/recipes/default/hook/data/overlay/usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf @@ -0,0 +1,24 @@ +[General] +auto-profiles = yes + +[Mapping stereo-out] +device-strings = hw:0 +fallback = yes +channel-map = left,right +paths-output = analog-output analog-output-speaker analog-output-headphones +direction = output +priority = 1 + +[Mapping headset-mono-in] +device-strings = hw:0 +fallback = yes +channel-map = mono +paths-input = analog-input-reform +direction = input +priority = 1 + +[Profile output:stereo-out+input:mono-in] +description = MNT Reform +output-mappings = stereo-out +input-mappings = headset-mono-in + diff --git a/src/recipes/default/hook/essential.sh b/src/recipes/default/hook/essential.sh new file mode 100755 index 0000000..e0fd04e --- /dev/null +++ b/src/recipes/default/hook/essential.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +printf "Essential hook script for mmdebstrap\n\n" +printf "Configure locales\n" +chroot $1 ln --force --symbolic /usr/share/zoneinfo/Europe/Paris /etc/localtime +echo "locales locales/default_environment_locale select en_US.UTF-8" | chroot $1 debconf-set-selections +echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8" | chroot $1 debconf-set-selections +chroot $1 dpkg --configure -a + +exit 0 diff --git a/src/recipes/default/hook/extract.sh b/src/recipes/default/hook/extract.sh new file mode 100755 index 0000000..7972e97 --- /dev/null +++ b/src/recipes/default/hook/extract.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +printf "Extract hook script for mmdebstrap\n\n" + +exit 0 diff --git a/src/recipes/default/hook/setup.sh b/src/recipes/default/hook/setup.sh new file mode 100755 index 0000000..8bce97c --- /dev/null +++ b/src/recipes/default/hook/setup.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +printf "Setup hook script for mmdebstrap\n\n" + +exit 0 diff --git a/src/recipes/default/packages/packages.list b/src/recipes/default/packages/packages.list new file mode 100644 index 0000000..907157f --- /dev/null +++ b/src/recipes/default/packages/packages.list @@ -0,0 +1,92 @@ +alsa-utils +arc-theme +bash-completion +breeze-icon-theme +brightness-udev +brightnessctl +bsdmainutils +ca-certificates +connman-gtk +console-data +console-setup +coreutils +cpio +cron +cryptsetup +curl +debian-archive-keyring +dosfstools +e2fsprogs +engrampa +eog +evince +fbset +file +fonts-noto-color-emoji +gedit +git +gpg +gnome-disk-utility +gnome-icon-theme +gnome-system-monitor +gpgv +gpm +grim +htop +ifupdown +init-system-helpers +iproute2 +iptables +iputils-ping +ircii +isc-dhcp-client +kbd +less +libblockdev-crypto2 +libblockdev-dm2 +libpam-systemd +lm-sensors +locales +lxpolkit +man-db +mesa-utils +micro +mpv +nano +ncdu +ncurses-term +net-tools +netbase +netcat-traditional +nfacct +ntp +ntpdate +parted +pavucontrol +pciutils +policykit-1 +procps +pulseaudio +python3-psutil +readline-common +rfkill +rofi +screen +slurp +sudo +sway +systemd +systemd-sysv +telnet +thunar +tmux +traceroute +unicode-data +usbutils +vim +w3m +wget +wpasupplicant +xfce4-terminal +xterm +xwayland diff --git a/src/recipes/default/packages/packages_build.list b/src/recipes/default/packages/packages_build.list new file mode 100644 index 0000000..7803469 --- /dev/null +++ b/src/recipes/default/packages/packages_build.list @@ -0,0 +1,86 @@ +autoconf +autopoint +bison +cmake +expat +flex +g++ +gcc +gettext +git +intltool +libbsd-dev +libdbus-1-dev +libdbusmenu-gtk3-dev +libdrm-dev +libepoxy-dev +libevdev-dev +libflac-dev +libfmt-dev +libgarcon-1-dev +libgbm-dev +libgirepository1.0-dev +libgtkmm-3.0-dev +libinput-dev +libjson-c-dev +libjsoncpp-dev +libmpdclient-dev +libmpeg2-4-dev +libmpg123-dev +libmtdev-dev +libnl-3-dev +libnl-genl-3-dev +libpango1.0-dev +libpciaccess-dev +libpcre3-dev +libpixman-1-dev +libpng-dev +libpulse-dev +libsdl2-dev +libsdl2-gfx-dev +libsdl2-image-dev +libsdl2-mixer-dev +libsdl2-net-dev +libsdl2-ttf-dev +libsigc++-2.0-dev +libspdlog-dev +libsystemd-dev +libtool +libudev-dev +libunwind-dev +libwayland-dev +libwayland-egl-backend-dev +libx11-dev +libx11-xcb-dev +libxcb-composite0-dev +libxcb-dri2-0-dev +libxcb-dri3-dev +libxcb-glx0-dev +libxcb-icccm4-dev +libxcb-present-dev +libxcb-sync-dev +libxcb-xfixes0-dev +libxcb-xinput-dev +libxdamage-dev +libxext-dev +libxfce4ui-2-dev +libxfixes-dev +libxfont-dev +libxkbcommon-dev +libxkbfile-dev +libxml2-dev +libxrandr-dev +libxshmfence-dev +libxxf86vm-dev +llvm-dev +make +meson +nettle-dev +patch +python3-mako +python3-setuptools +wayland-protocols +xfce4-dev-tools +xfonts-utils +xutils-dev +zlib1g-dev