public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-portage-dev@lists.gentoo.org
Cc: "Michał Górny" <mgorny@gentoo.org>
Subject: [gentoo-portage-dev] [PATCH v2] install-qa-checks.d: Add a check for Gentoo path policies (FHS-y)
Date: Tue,  4 Sep 2018 19:53:38 +0200	[thread overview]
Message-ID: <20180904175338.3146-1-mgorny@gentoo.org> (raw)

Add a check that verifies whether ebuilds don't install to paths
forbidden by the policy.  This mostly aims to verbosely report bugs
such as missing dependencies causing empty install paths, resulting
in files ending up in / and bad upstreams.  This should also help
detect the relatively common mistake of using /usr/share/doc/${P}
instead of ${PF}.

The initial list of allowed paths was based on what ebuilds installed
to my system.
---
 bin/install-qa-check.d/08gentoo-paths | 80 +++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)
 create mode 100644 bin/install-qa-check.d/08gentoo-paths

Changes in v2:
* added a comment wrt /usr/games (as suggested by ulm).

diff --git a/bin/install-qa-check.d/08gentoo-paths b/bin/install-qa-check.d/08gentoo-paths
new file mode 100644
index 000000000..946185cc2
--- /dev/null
+++ b/bin/install-qa-check.d/08gentoo-paths
@@ -0,0 +1,80 @@
+# Check whether ebuilds are not installing new, non-Gentoo-ey paths.
+
+gentoo_path_check() {
+	# allowed path definitions
+	# ------------------------
+
+	# directories common to / and /usr
+	local allowed_common_dirs=(
+		bin lib lib32 lib64 libx32 sbin
+	)
+
+	# toplevel directories which can be installed to by ebuilds
+	# /home is not included as no ebuilds should install files there
+	local allowed_paths_toplevel=(
+		"${allowed_common_dirs[@]}"
+		boot dev etc opt srv usr var
+		# TODO: do we need it? gconf installs empty dir there but that's
+		# all
+		root
+	)
+
+	# directories in /usr which can be installed to by ebuilds
+	# /usr/games is not included as it is banned nowadays
+	local allowed_paths_usr=(
+		"${allowed_common_dirs[@]}"
+		include libexec share src
+		# toolchain stuff
+		"${CHOST}" "${CTARGET}"
+	)
+
+
+	# the logic
+	# ---------
+	local bad_paths=()
+	local x
+
+	local shopt_save=$(shopt -p nullglob)
+	shopt -s nullglob
+
+	# 1. check for unexpected top-level directories
+	local toplevel_dirs=( "${ED%/}"/* )
+	for x in "${toplevel_dirs[@]##*/}"; do
+		if ! has "${x}" "${allowed_paths_toplevel[@]}"; then
+			bad_paths+=( "/${x}" )
+		fi
+	done
+
+	# 2. check for unexpected /usr subdirectories
+	local usr_dirs=( "${ED%/}"/usr/* )
+	for x in "${usr_dirs[@]##*/}"; do
+		if ! has "${x}" "${allowed_paths_usr[@]}"; then
+			bad_paths+=( "/usr/${x}" )
+		fi
+	done
+
+	# 3. check for unexpected /usr/share/doc subdirectories
+	local doc_dirs=( "${ED%/}"/usr/share/doc/* )
+	for x in "${doc_dirs[@]##*/}"; do
+		if [[ ${x} != ${PF} ]]; then
+			bad_paths+=( "/usr/share/doc/${x}" )
+		fi
+	done
+
+	${shopt_save}
+
+	# report
+	# ------
+	if [[ -n ${bad_paths[@]} ]]; then
+		eqawarn "The ebuild is installing to one or more unexpected paths:"
+		eqawarn
+		eqatag -v non-gentoo-paths "${bad_paths[@]}"
+		eqawarn
+		eqawarn "Please fix the ebuild to use correct FHS/Gentoo policy paths."
+	fi
+}
+
+gentoo_path_check
+: # guarantee successful exit
+
+# vim:ft=sh
-- 
2.18.0



             reply	other threads:[~2018-09-04 17:53 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-04 17:53 Michał Górny [this message]
2018-09-04 17:55 ` [gentoo-portage-dev] [PATCH v2] install-qa-checks.d: Add a check for Gentoo path policies (FHS-y) Michael Orlitzky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180904175338.3146-1-mgorny@gentoo.org \
    --to=mgorny@gentoo.org \
    --cc=gentoo-portage-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox