All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCHv4 1/4] systemd: Do not install anything in /var/volatile
@ 2021-11-01  0:03 Peter Kjellerstedt
  2021-11-01  0:03 ` [PATCHv4 2/4] base-files: Ignore the empty-dirs QA error due to files " Peter Kjellerstedt
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Peter Kjellerstedt @ 2021-11-01  0:03 UTC (permalink / raw)
  To: openembedded-core

/var/log is typically a symbolic link to inside /var/volatile, which
is expected to be empty. Check ${VOLATILE_LOG_DIR} to see if it is ok
to install /var/log.

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
---

PATCHv2: Added check for ${VOLATILE_LOG_DIR} before removing /var/log.
PATCHv3: No changes.
PATCHv4: No changes.

 meta/recipes-core/systemd/systemd_249.5.bb | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/meta/recipes-core/systemd/systemd_249.5.bb b/meta/recipes-core/systemd/systemd_249.5.bb
index d87f54bf16..c0c1f9bcfc 100644
--- a/meta/recipes-core/systemd/systemd_249.5.bb
+++ b/meta/recipes-core/systemd/systemd_249.5.bb
@@ -270,13 +270,16 @@ do_install() {
 		install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_system_unitdir}d-sysv-install
 	fi
 
-	chown root:systemd-journal ${D}/${localstatedir}/log/journal
-
-	# Delete journal README, as log can be symlinked inside volatile.
-	rm -f ${D}/${localstatedir}/log/README
+	if "${@'true' if oe.types.boolean(d.getVar('VOLATILE_LOG_DIR')) else 'false'}"; then
+		# /var/log is typically a symbolic link to inside /var/volatile,
+		# which is expected to be empty.
+		rm -rf ${D}${localstatedir}/log
+	else
+		chown root:systemd-journal ${D}${localstatedir}/log/journal
 
-	# journal-remote creates this at start
-	rm -rf ${D}/${localstatedir}/log/journal/remote
+		# journal-remote creates this at start
+		rm -rf ${D}${localstatedir}/log/journal/remote
+	fi
 
 	install -d ${D}${systemd_system_unitdir}/graphical.target.wants
 	install -d ${D}${systemd_system_unitdir}/multi-user.target.wants


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCHv4 2/4] base-files: Ignore the empty-dirs QA error due to files in /var/volatile
  2021-11-01  0:03 [PATCHv4 1/4] systemd: Do not install anything in /var/volatile Peter Kjellerstedt
@ 2021-11-01  0:03 ` Peter Kjellerstedt
  2021-11-01  0:03 ` [PATCHv4 3/4] apt: Do not install /var/log/apt Peter Kjellerstedt
  2021-11-01  0:03 ` [PATCHv4 4/4] insane.bbclass: Add a check for directories that are expected to be empty Peter Kjellerstedt
  2 siblings, 0 replies; 5+ messages in thread
From: Peter Kjellerstedt @ 2021-11-01  0:03 UTC (permalink / raw)
  To: openembedded-core

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
---

PATCHv3: An alternative to skipping the empty-dirs QA test for
base-files would be to remove /var/volatile/tmp and /var/volatile/log,
but I do not know if there are any consequences of doing that, e.g., due
to them not existing before the tmpfs has been mounted on top of
/var/volatile. Thus I have left them in place.
PATCHv4: No changes.

 meta/recipes-core/base-files/base-files_3.0.14.bb | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/meta/recipes-core/base-files/base-files_3.0.14.bb b/meta/recipes-core/base-files/base-files_3.0.14.bb
index 032827a0d0..c3ecd81c4a 100644
--- a/meta/recipes-core/base-files/base-files_3.0.14.bb
+++ b/meta/recipes-core/base-files/base-files_3.0.14.bb
@@ -182,3 +182,5 @@ PACKAGE_ARCH = "${MACHINE_ARCH}"
 
 CONFFILES:${PN} = "${sysconfdir}/fstab ${@['', '${sysconfdir}/hostname ${sysconfdir}/hosts'][(d.getVar('hostname') != '')]} ${sysconfdir}/shells"
 CONFFILES:${PN} += "${sysconfdir}/motd ${sysconfdir}/nsswitch.conf ${sysconfdir}/profile"
+
+INSANE_SKIP:${PN} += "empty-dirs"


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCHv4 3/4] apt: Do not install /var/log/apt
  2021-11-01  0:03 [PATCHv4 1/4] systemd: Do not install anything in /var/volatile Peter Kjellerstedt
  2021-11-01  0:03 ` [PATCHv4 2/4] base-files: Ignore the empty-dirs QA error due to files " Peter Kjellerstedt
@ 2021-11-01  0:03 ` Peter Kjellerstedt
  2021-11-02 17:41   ` [OE-core] " Richard Purdie
  2021-11-01  0:03 ` [PATCHv4 4/4] insane.bbclass: Add a check for directories that are expected to be empty Peter Kjellerstedt
  2 siblings, 1 reply; 5+ messages in thread
From: Peter Kjellerstedt @ 2021-11-01  0:03 UTC (permalink / raw)
  To: openembedded-core

/var/log is normally a link to /var/volatile/log and /var/volatile is a
tmpfs mount. So anything created in /var/log will not be available when
the tmpfs is mounted.

Also some whitespace clean up.

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
---
 meta/recipes-devtools/apt/apt_2.2.4.bb | 30 ++++++++++++++------------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/meta/recipes-devtools/apt/apt_2.2.4.bb b/meta/recipes-devtools/apt/apt_2.2.4.bb
index 29fc49fb39..3d88371169 100644
--- a/meta/recipes-devtools/apt/apt_2.2.4.bb
+++ b/meta/recipes-devtools/apt/apt_2.2.4.bb
@@ -51,9 +51,8 @@ EXTRA_OECMAKE:append = " -DCURRENT_VENDOR=debian -DWITH_DOC=False \
     -DWITH_TESTS=False \
 "
 
-do_configure:prepend () {
-    echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )" >>  ${WORKDIR}/toolchain.cmake
-
+do_configure:prepend() {
+	echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )" >>  ${WORKDIR}/toolchain.cmake
 }
 
 # Unfortunately apt hardcodes this all over the place
@@ -61,7 +60,7 @@ FILES:${PN} += "${prefix}/lib/dpkg ${prefix}/lib/apt"
 RDEPENDS:${PN} += "bash perl dpkg"
 
 customize_apt_conf_sample() {
-    cat > ${D}${sysconfdir}/apt/apt.conf.sample << EOF
+	cat > ${D}${sysconfdir}/apt/apt.conf.sample << EOF
 Dir "${STAGING_DIR_NATIVE}/"
 {
    State "var/lib/apt/"
@@ -114,22 +113,25 @@ EOF
 }
 
 do_install:append:class-native() {
-    customize_apt_conf_sample
+	customize_apt_conf_sample
 }
 
 do_install:append:class-nativesdk() {
-    customize_apt_conf_sample
+	customize_apt_conf_sample
 }
 
-
 do_install:append:class-target() {
-    #Write the correct apt-architecture to apt.conf
-    APT_CONF=${D}/etc/apt/apt.conf
-    echo 'APT::Architecture "${DPKG_ARCH}";' > ${APT_CONF}
+	# Write the correct apt-architecture to apt.conf
+	APT_CONF=${D}${sysconfdir}/apt/apt.conf
+	echo 'APT::Architecture "${DPKG_ARCH}";' > ${APT_CONF}
 }
 
-# Avoid non-reproducible -src package
-do_install:append () {
-        sed -i -e "s,${B},,g" \
-            ${B}/apt-pkg/tagfile-keys.cc
+do_install:append() {
+	# Remove /var/log/apt. /var/log is normally a link to /var/volatile/log
+	# and /var/volatile is a tmpfs mount. So anything created in /var/log
+	# will not be available when the tmpfs is mounted.
+	rm -rf ${D}${localstatedir}/log
+
+	# Avoid non-reproducible -src package
+	sed -i -e "s,${B},,g" ${B}/apt-pkg/tagfile-keys.cc
 }


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCHv4 4/4] insane.bbclass: Add a check for directories that are expected to be empty
  2021-11-01  0:03 [PATCHv4 1/4] systemd: Do not install anything in /var/volatile Peter Kjellerstedt
  2021-11-01  0:03 ` [PATCHv4 2/4] base-files: Ignore the empty-dirs QA error due to files " Peter Kjellerstedt
  2021-11-01  0:03 ` [PATCHv4 3/4] apt: Do not install /var/log/apt Peter Kjellerstedt
@ 2021-11-01  0:03 ` Peter Kjellerstedt
  2 siblings, 0 replies; 5+ messages in thread
From: Peter Kjellerstedt @ 2021-11-01  0:03 UTC (permalink / raw)
  To: openembedded-core

The empty-dirs QA check verifies that all directories specified in
QA_EMPTY_DIRS are empty. It is possible to specify why a directory is
expected to be empty by defining QA_EMPTY_DIRS_RECOMMENDATION:<path>,
which will then be included in the error message if the directory is
not empty. If it is not specified for a directory, then "but it is
expected to be empty" will be used.

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
---

PATCHv2: No changes.
PATCHv3: No changes.
PATCHv4: No changes.

 meta/classes/insane.bbclass  | 33 ++++++++++++++++++++++++++++++++-
 meta/conf/documentation.conf |  2 ++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/meta/classes/insane.bbclass b/meta/classes/insane.bbclass
index 1e2f1b768a..1675adf6ac 100644
--- a/meta/classes/insane.bbclass
+++ b/meta/classes/insane.bbclass
@@ -37,7 +37,7 @@ ERROR_QA ?= "dev-so debug-deps dev-deps debug-files arch pkgconfig la \
             configure-gettext perllocalpod shebang-size \
             already-stripped installed-vs-shipped ldflags compile-host-path \
             install-host-path pn-overrides unknown-configure-option \
-            useless-rpaths rpaths staticdev \
+            useless-rpaths rpaths staticdev empty-dirs \
             "
 # Add usrmerge QA check based on distro feature
 ERROR_QA:append = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', ' usrmerge', '', d)}"
@@ -50,6 +50,21 @@ ALL_QA = "${WARN_QA} ${ERROR_QA}"
 
 UNKNOWN_CONFIGURE_WHITELIST ?= "--enable-nls --disable-nls --disable-silent-rules --disable-dependency-tracking --with-libtool-sysroot --disable-static"
 
+# This is a list of directories that are expected to be empty.
+QA_EMPTY_DIRS ?= " \
+    /dev/pts \
+    /media \
+    /proc \
+    /run \
+    /tmp \
+    ${localstatedir}/run \
+    ${localstatedir}/volatile \
+"
+# It is possible to specify why a directory is expected to be empty by defining
+# QA_EMPTY_DIRS_RECOMMENDATION:<path>, which will then be included in the error
+# message if the directory is not empty. If it is not specified for a directory,
+# then "but it is expected to be empty" will be used.
+
 def package_qa_clean_path(path, d, pkg=None):
     """
     Remove redundant paths from the path for display.  If pkg isn't set then
@@ -885,6 +900,22 @@ def package_qa_check_unlisted_pkg_lics(package, d, messages):
                            "listed in LICENSE" % (package, ' '.join(unlisted)))
     return False
 
+QAPKGTEST[empty-dirs] = "package_qa_check_empty_dirs"
+def package_qa_check_empty_dirs(pkg, d, messages):
+    """
+    Check for the existence of files in directories that are expected to be
+    empty.
+    """
+
+    pkgd = oe.path.join(d.getVar('PKGDEST'), pkg)
+    for dir in (d.getVar('QA_EMPTY_DIRS') or "").split():
+        empty_dir = oe.path.join(pkgd, dir)
+        if os.path.exists(empty_dir) and os.listdir(empty_dir):
+            recommendation = (d.getVar('QA_EMPTY_DIRS_RECOMMENDATION:' + dir) or
+                              "but it is expected to be empty")
+            msg = "%s installs files in %s, %s" % (pkg, dir, recommendation)
+            oe.qa.add_message(messages, "empty-dirs", msg)
+
 def package_qa_check_encoding(keys, encode, d):
     def check_encoding(key, enc):
         sane = True
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
index 80ad8e10d5..45cd01374a 100644
--- a/meta/conf/documentation.conf
+++ b/meta/conf/documentation.conf
@@ -345,6 +345,8 @@ PYPI_SRC_URI[doc] = "The URI to use to fetch from pypi, default uses pythonhoste
 
 #Q
 
+QA_EMPTY_DIRS[doc] = "A list of directories that are expected to be empty."
+QA_EMPTY_DIRS_RECOMMENDATION[doc] = "This specifies a recommendation for a directory why it must be empty, which will be included in the error message if the directory is not empty."
 QMAKE_PROFILES[doc] = "Specifies your own subset of .pro files to be built for use with qmake."
 
 #R


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [OE-core] [PATCHv4 3/4] apt: Do not install /var/log/apt
  2021-11-01  0:03 ` [PATCHv4 3/4] apt: Do not install /var/log/apt Peter Kjellerstedt
@ 2021-11-02 17:41   ` Richard Purdie
  0 siblings, 0 replies; 5+ messages in thread
From: Richard Purdie @ 2021-11-02 17:41 UTC (permalink / raw)
  To: Peter Kjellerstedt, openembedded-core

On Mon, 2021-11-01 at 01:03 +0100, Peter Kjellerstedt wrote:
> /var/log is normally a link to /var/volatile/log and /var/volatile is a
> tmpfs mount. So anything created in /var/log will not be available when
> the tmpfs is mounted.
> 
> Also some whitespace clean up.
> 
> Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
> ---
>  meta/recipes-devtools/apt/apt_2.2.4.bb | 30 ++++++++++++++------------
>  1 file changed, 16 insertions(+), 14 deletions(-)
> 
> diff --git a/meta/recipes-devtools/apt/apt_2.2.4.bb b/meta/recipes-devtools/apt/apt_2.2.4.bb
> index 29fc49fb39..3d88371169 100644
> --- a/meta/recipes-devtools/apt/apt_2.2.4.bb
> +++ b/meta/recipes-devtools/apt/apt_2.2.4.bb
> @@ -51,9 +51,8 @@ EXTRA_OECMAKE:append = " -DCURRENT_VENDOR=debian -DWITH_DOC=False \
>      -DWITH_TESTS=False \
>  "
>  
> -do_configure:prepend () {
> -    echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )" >>  ${WORKDIR}/toolchain.cmake
> -
> +do_configure:prepend() {
> +	echo "set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH )" >>  ${WORKDIR}/toolchain.cmake
>  }
>  
>  # Unfortunately apt hardcodes this all over the place
> @@ -61,7 +60,7 @@ FILES:${PN} += "${prefix}/lib/dpkg ${prefix}/lib/apt"
>  RDEPENDS:${PN} += "bash perl dpkg"
>  
>  customize_apt_conf_sample() {
> -    cat > ${D}${sysconfdir}/apt/apt.conf.sample << EOF
> +	cat > ${D}${sysconfdir}/apt/apt.conf.sample << EOF
>  Dir "${STAGING_DIR_NATIVE}/"
>  {
>     State "var/lib/apt/"
> @@ -114,22 +113,25 @@ EOF
>  }
>  
>  do_install:append:class-native() {
> -    customize_apt_conf_sample
> +	customize_apt_conf_sample
>  }
>  
>  do_install:append:class-nativesdk() {
> -    customize_apt_conf_sample
> +	customize_apt_conf_sample
>  }
>  
> -
>  do_install:append:class-target() {
> -    #Write the correct apt-architecture to apt.conf
> -    APT_CONF=${D}/etc/apt/apt.conf
> -    echo 'APT::Architecture "${DPKG_ARCH}";' > ${APT_CONF}
> +	# Write the correct apt-architecture to apt.conf
> +	APT_CONF=${D}${sysconfdir}/apt/apt.conf
> +	echo 'APT::Architecture "${DPKG_ARCH}";' > ${APT_CONF}
>  }
>  
> -# Avoid non-reproducible -src package
> -do_install:append () {
> -        sed -i -e "s,${B},,g" \
> -            ${B}/apt-pkg/tagfile-keys.cc
> +do_install:append() {
> +	# Remove /var/log/apt. /var/log is normally a link to /var/volatile/log
> +	# and /var/volatile is a tmpfs mount. So anything created in /var/log
> +	# will not be available when the tmpfs is mounted.
> +	rm -rf ${D}${localstatedir}/log
> +
> +	# Avoid non-reproducible -src package
> +	sed -i -e "s,${B},,g" ${B}/apt-pkg/tagfile-keys.cc
>  }

I didn't bisect it down but this looks likely to be from this change:

https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/2796/steps/14/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/50/builds/4279/steps/11/logs/stdio

https://autobuilder.yoctoproject.org/typhoon/#/builders/76/builds/4260/steps/14/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/115/builds/919/steps/12/logs/stdio
(and more)

Cheers,

Richard



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-11-02 17:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-01  0:03 [PATCHv4 1/4] systemd: Do not install anything in /var/volatile Peter Kjellerstedt
2021-11-01  0:03 ` [PATCHv4 2/4] base-files: Ignore the empty-dirs QA error due to files " Peter Kjellerstedt
2021-11-01  0:03 ` [PATCHv4 3/4] apt: Do not install /var/log/apt Peter Kjellerstedt
2021-11-02 17:41   ` [OE-core] " Richard Purdie
2021-11-01  0:03 ` [PATCHv4 4/4] insane.bbclass: Add a check for directories that are expected to be empty Peter Kjellerstedt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.