From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 60EA71381F3 for ; Thu, 22 Oct 2020 18:59:37 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id A6339E084E; Thu, 22 Oct 2020 18:59:36 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 7D032E084E for ; Thu, 22 Oct 2020 18:59:35 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id EAD68340C9C for ; Thu, 22 Oct 2020 18:59:33 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 6E4BB3AA for ; Thu, 22 Oct 2020 18:59:32 +0000 (UTC) From: "Matt Turner" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Matt Turner" Message-ID: <1603393050.2b2bb477aacbff60bed4e8964af2802ec439d1d4.mattst88@gentoo> Subject: [gentoo-commits] proj/catalyst:pending/mattst88 commit in: catalyst/base/, targets/support/ X-VCS-Repository: proj/catalyst X-VCS-Files: catalyst/base/stagebase.py targets/support/kill-chroot-pids.sh X-VCS-Directories: targets/support/ catalyst/base/ X-VCS-Committer: mattst88 X-VCS-Committer-Name: Matt Turner X-VCS-Revision: 2b2bb477aacbff60bed4e8964af2802ec439d1d4 X-VCS-Branch: pending/mattst88 Date: Thu, 22 Oct 2020 18:59:32 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 8a5574c1-b680-442b-bf1b-a8fd972c6a2b X-Archives-Hash: b2928f8a55a679753e77079993dcaf42 commit: 2b2bb477aacbff60bed4e8964af2802ec439d1d4 Author: Matt Turner gentoo org> AuthorDate: Thu Oct 22 18:19:09 2020 +0000 Commit: Matt Turner gentoo org> CommitDate: Thu Oct 22 18:57:30 2020 +0000 URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=2b2bb477 catalyst: Remove kill_support_pids() We've been using since e5a53e42 ("catalyst: create namespaces for building"), and mount_namespaces(7) says A mount ceases to be a member of a peer group when either the mount is explicitly unmounted, or when the mount is implicitly unmounted because a mount namespace is removed (because it has no more member processes). So the mounts are implicitly unmounted when the last process in the namespace dies, meaning we don't need to try any funny business around cleaning up processes in order to unmount. Signed-off-by: Matt Turner gentoo.org> catalyst/base/stagebase.py | 33 ++++---------------- targets/support/kill-chroot-pids.sh | 62 ------------------------------------- 2 files changed, 6 insertions(+), 89 deletions(-) diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py index be7b96c8..06919fb5 100644 --- a/catalyst/base/stagebase.py +++ b/catalyst/base/stagebase.py @@ -629,17 +629,6 @@ class StageBase(TargetBase, ClearBase, GenBase): assert self.settings[verify] == "blake2" self.settings.setdefault("gk_mainargs", []).append("--b2sum") - def kill_chroot_pids(self): - log.info('Checking for processes running in chroot and killing them.') - - # Force environment variables to be exported so script can see them - self.setup_environment() - - killcmd = normpath(self.settings["sharedir"] + - self.settings["shdir"] + "/support/kill-chroot-pids.sh") - if os.path.exists(killcmd): - cmd([killcmd], env=self.env) - def mount_safety_check(self): """ Check and verify that none of our paths in mypath are mounted. We don't @@ -884,8 +873,8 @@ class StageBase(TargetBase, ClearBase, GenBase): cmd(mount + [source, target], env=self.env, fail_func=self.unbind) def unbind(self): - ouch = 0 mypath = self.settings["chroot_path"] + umount_failed = False # Unmount in reverse order for x in [x for x in reversed(self.mount) if self.mount[x]['enable']]: @@ -900,19 +889,12 @@ class StageBase(TargetBase, ClearBase, GenBase): try: cmd(['umount', target], env=self.env) - except CatalystError: - log.warning('First attempt to unmount failed: %s', target) - log.warning('Killing any pids still running in the chroot') - - self.kill_chroot_pids() + except OSError as e: + log.warning("Couldn't umount: %s, %s", target, + e.strerror) + umount_failed = True - try: - cmd(['umount', target], env=self.env) - except CatalystError: - ouch = 1 - log.warning("Couldn't umount bind mount: %s", target) - - if ouch: + if umount_failed: # if any bind mounts really failed, then we need to raise # this to potentially prevent an upcoming bash stage cleanup script # from wiping our bind mounts. @@ -1345,9 +1327,6 @@ class StageBase(TargetBase, ClearBase, GenBase): def run(self): self.chroot_lock.write_lock() - # Kill any pids in the chroot - self.kill_chroot_pids() - # Check for mounts right away and abort if we cannot unmount them self.mount_safety_check() diff --git a/targets/support/kill-chroot-pids.sh b/targets/support/kill-chroot-pids.sh deleted file mode 100755 index ea8ee402..00000000 --- a/targets/support/kill-chroot-pids.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# Script to kill processes found running in the chroot. - -if [ "${clst_chroot_path}" == "/" ] -then - echo "Aborting .... clst_chroot_path is set to /" - echo "This is very dangerous" - exit 1 -fi - -if [ "${clst_chroot_path}" == "" ] -then - echo "Aborting .... clst_chroot_path is NOT set" - echo "This is very dangerous" - exit 1 -fi - -j=0 -declare -a pids -# Get files and dirs in /proc -for i in `ls /proc` -do - # Test for directories - if [ -d /proc/$i ] - then - # Search for exe containing string inside ${clst_chroot_path} - ls -la --color=never /proc/$i 2>&1 |grep exe|grep ${clst_chroot_path} > /dev/null - - # If found - if [ $? == 0 ] - then - # Assign the pid into the pids array - pids[$j]=$i - j=$(($j+1)) - fi - fi -done - -if [ ${j} -gt 0 ] -then - echo - echo "Killing process(es)" - echo "pid: process name" - for pid in ${pids[@]} - do - P_NAME=$(ls -la --color=never /proc/${pid} 2>&1 |grep exe|grep ${clst_chroot_path}|awk '{print $11}') - echo ${pid}: ${P_NAME} - done - echo - echo "Press Ctrl-C within 10 seconds to abort" - - sleep 10 - - for pid in ${pids[@]} - do - kill -9 ${pid} - done - - # Small sleep here to give the process(es) a chance to die before running unbind again. - sleep 5 - -fi