[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#928395: marked as done (unblock: apt/1.8.1)



Your message dated Mon, 06 May 2019 20:00:00 +0000
with message-id <bd95c044-57a0-7640-f589-723354bcc79f@thykier.net>
and subject line Re: Bug#928395: unblock: apt/1.8.1
has caused the Debian Bug report #928395,
regarding unblock: apt/1.8.1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
928395: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=928395
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package apt

I'd like to add systemd inhibitor support to apt in buster, so people
don't shoot each other in the foot, in case one admin reboots a machine
while somebody else is installing patches.

The diff is quite small.

I'd also love to smuggle in some additional kernel package names in
debian/apt.conf.autoremove - they don't really affect, only Ubuntu - we
share the 1.8.y series for like 9 mo, but it's not an invasive change
(there's like 0 potential of a regression), I think they are:

  linux-buildinfo
  linux-image-unsigned
  linux-source

But I have not committed them yet.

unblock apt/1.8.1

-- System Information:
Debian Release: buster/sid
  APT prefers eoan
  APT policy: (991, 'eoan'), (500, 'eoan'), (500, 'cosmic-security')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.0.0-13-generic (SMP w/8 CPU cores)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

-- 
debian developer - deb.li/jak | jak-linux.org - free software dev
ubuntu core developer                              i speak de, en
diff --git a/CMake/FindSystemd.cmake b/CMake/FindSystemd.cmake
new file mode 100644
index 000000000..1c7a7debf
--- /dev/null
+++ b/CMake/FindSystemd.cmake
@@ -0,0 +1,24 @@
+# - Try to find SYSTEMD
+# Once done, this will define
+#
+#  SYSTEMD_FOUND - system has SYSTEMD
+#  SYSTEMD_INCLUDE_DIRS - the SYSTEMD include directories
+#  SYSTEMD_LIBRARIES - the SYSTEMD library
+find_package(PkgConfig)
+
+pkg_check_modules(SYSTEMD_PKGCONF libsystemd)
+
+find_path(SYSTEMD_INCLUDE_DIRS
+  NAMES systemd/sd-bus.h
+  PATHS ${SYSTEMD_PKGCONF_INCLUDE_DIRS}
+)
+
+find_library(SYSTEMD_LIBRARIES
+  NAMES systemd
+  PATHS ${SYSTEMD_PKGCONF_LIBRARY_DIRS}
+)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Systemd DEFAULT_MSG SYSTEMD_INCLUDE_DIRS SYSTEMD_LIBRARIES)
+
+mark_as_advanced(SYSTEMD_INCLUDE_DIRS SYSTEMD_LIBRARIES)
diff --git a/CMake/config.h.in b/CMake/config.h.in
index 74d78fdb2..a9528ccfa 100644
--- a/CMake/config.h.in
+++ b/CMake/config.h.in
@@ -20,6 +20,9 @@
 /* Define if we have the zstd library for zst */
 #cmakedefine HAVE_ZSTD
 
+/* Define if we have the systemd library */
+#cmakedefine HAVE_SYSTEMD
+
 /* Define if we have the udev library */
 #cmakedefine HAVE_UDEV
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 60f329078..500186105 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -115,6 +115,11 @@ if (UDEV_FOUND)
   set(HAVE_UDEV 1)
 endif()
 
+find_package(Systemd)
+if (SYSTEMD_FOUND)
+  set(HAVE_SYSTEMD 1)
+endif()
+
 find_package(Seccomp)
 if (SECCOMP_FOUND)
   set(HAVE_SECCOMP 1)
diff --git a/apt-pkg/CMakeLists.txt b/apt-pkg/CMakeLists.txt
index 64709ce34..ce73c6a34 100644
--- a/apt-pkg/CMakeLists.txt
+++ b/apt-pkg/CMakeLists.txt
@@ -46,6 +46,7 @@ target_include_directories(apt-pkg
                                    ${LZ4_INCLUDE_DIRS}
                                    $<$<BOOL:${ZSTD_FOUND}>:${ZSTD_INCLUDE_DIRS}>
                                    $<$<BOOL:${UDEV_FOUND}>:${UDEV_INCLUDE_DIRS}>
+                                   $<$<BOOL:${SYSTEMD_FOUND}>:${SYSTEMD_INCLUDE_DIRS}>
                                    ${ICONV_INCLUDE_DIRS}
 )
 
@@ -58,6 +59,7 @@ target_link_libraries(apt-pkg
                              ${LZ4_LIBRARIES}
                              $<$<BOOL:${ZSTD_FOUND}>:${ZSTD_LIBRARIES}>
                              $<$<BOOL:${UDEV_FOUND}>:${UDEV_LIBRARIES}>
+                             $<$<BOOL:${SYSTEMD_FOUND}>:${SYSTEMD_LIBRARIES}>
                              ${ICONV_LIBRARIES}
 )
 set_target_properties(apt-pkg PROPERTIES VERSION ${MAJOR}.${MINOR})
diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc
index 0c0cb05ea..4f123491b 100644
--- a/apt-pkg/contrib/fileutl.cc
+++ b/apt-pkg/contrib/fileutl.cc
@@ -71,6 +71,9 @@
 #ifdef HAVE_ZSTD
 #include <zstd.h>
 #endif
+#ifdef HAVE_SYSTEMD
+#include <systemd/sd-bus.h>
+#endif
 #include <endian.h>
 #include <stdint.h>
 
@@ -3393,3 +3396,48 @@ bool OpenConfigurationFileFd(std::string const &File, FileFd &Fd) /*{{{*/
    return true;
 }
 									/*}}}*/
+int Inhibit(const char *what, const char *who, const char *why, const char *mode) /*{{{*/
+{
+#ifdef HAVE_SYSTEMD
+   sd_bus_error error = SD_BUS_ERROR_NULL;
+   sd_bus_message *m = NULL;
+   sd_bus *bus = NULL;
+   int fd;
+   int r;
+
+   r = sd_bus_open_system(&bus);
+   if (r < 0)
+      goto out;
+
+   r = sd_bus_call_method(bus,
+			  "org.freedesktop.login1",
+			  "/org/freedesktop/login1",
+			  "org.freedesktop.login1.Manager",
+			  "Inhibit",
+			  &error,
+			  &m,
+			  "ssss",
+			  what,
+			  who,
+			  why,
+			  mode);
+   if (r < 0)
+      goto out;
+
+   r = sd_bus_message_read(m, "h", &fd);
+   if (r < 0)
+      goto out;
+
+   // We received a file descriptor, return it - systemd will close the read fd
+   // on free, so let's duplicate it here.
+   r = dup(fd);
+out:
+   sd_bus_error_free(&error);
+   sd_bus_message_unref(m);
+   sd_bus_unref(bus);
+   return r;
+#else
+   return -ENOTSUP;
+#endif
+}
+									/*}}}*/
diff --git a/apt-pkg/contrib/fileutl.h b/apt-pkg/contrib/fileutl.h
index 862880c31..9005b81b5 100644
--- a/apt-pkg/contrib/fileutl.h
+++ b/apt-pkg/contrib/fileutl.h
@@ -300,4 +300,6 @@ bool Popen(const char* Args[], FileFd &Fd, pid_t &Child, FileFd::OpenMode Mode);
 
 APT_HIDDEN bool OpenConfigurationFileFd(std::string const &File, FileFd &Fd);
 
+APT_HIDDEN int Inhibit(const char *what, const char *who, const char *why, const char *mode);
+
 #endif
diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc
index 3c707e220..ffa880df2 100644
--- a/apt-pkg/deb/dpkgpm.cc
+++ b/apt-pkg/deb/dpkgpm.cc
@@ -1463,6 +1463,21 @@ bool pkgDPkgPM::ExpandPendingCalls(std::vector<Item> &List, pkgDepCache &Cache)
 }
 bool pkgDPkgPM::Go(APT::Progress::PackageManager *progress)
 {
+   struct Inhibitor
+   {
+      int Fd = -1;
+      Inhibitor()
+      {
+	 if (_config->FindB("DPkg::Inhibit-Shutdown", true))
+	    Fd = Inhibit("shutdown", "APT", "APT is installing or removing packages", "block");
+      }
+      ~Inhibitor()
+      {
+	 if (Fd > 0)
+	    close(Fd);
+      }
+   } inhibitor;
+
    // explicitly remove&configure everything for hookscripts and progress building
    // we need them only temporarily through, so keep the length and erase afterwards
    decltype(List)::const_iterator::difference_type explicitIdx =
diff --git a/debian/changelog b/debian/changelog
index ea66922bf..a150c0769 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+apt (1.8.1) UNRELEASED; urgency=medium
+
+  * Add test case for local-only packages pinned to never
+  * Prevent shutdown while running dpkg (LP: #1820886)
+
+ -- Julian Andres Klode <jak@debian.org>  Fri, 03 May 2019 16:49:24 +0200
+
 apt (1.8.0) unstable; urgency=medium
 
   [ David Kalnischkies ]
diff --git a/debian/control b/debian/control
index 18b38ad39..a61210127 100644
--- a/debian/control
+++ b/debian/control
@@ -21,6 +21,7 @@ Build-Depends: cmake (>= 3.4),
                liblz4-dev (>= 0.0~r126),
                liblzma-dev,
                libseccomp-dev [amd64 arm64 armel armhf i386 mips mips64el mipsel ppc64el s390x hppa powerpc powerpcspe ppc64 x32],
+               libsystemd-dev [linux-any],
                libudev-dev [linux-any],
                libzstd-dev (>= 1.0),
                ninja-build,
diff --git a/doc/examples/configure-index b/doc/examples/configure-index
index 743e676de..5e317d7e0 100644
--- a/doc/examples/configure-index
+++ b/doc/examples/configure-index
@@ -503,6 +503,9 @@ DPkg
       progress-bg "<STRING>";
       progress-bar "<BOOL>";
    };
+
+   // Set a shutdown block inhibitor on systemd systems while running dpkg
+   Inhibit-Shutdown "<BOOL>";
 }
 
 /* Options you can set to see some debugging text They correspond to names
diff --git a/doc/po/apt-doc.pot b/doc/po/apt-doc.pot
index 37287d045..b175ce27d 100644
--- a/doc/po/apt-doc.pot
+++ b/doc/po/apt-doc.pot
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: apt-doc 1.8.0\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2019-03-08 09:41+0100\n"
+"POT-Creation-Date: 2019-05-03 16:51+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/po/apt-all.pot b/po/apt-all.pot
index e424d23b9..bc5f6b007 100644
--- a/po/apt-all.pot
+++ b/po/apt-all.pot
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: apt 1.8.0\n"
 "Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2019-03-08 09:41+0100\n"
+"POT-Creation-Date: 2019-05-03 16:51+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/test/integration/test-policy-pinning b/test/integration/test-policy-pinning
index 35e178871..b871f724b 100755
--- a/test/integration/test-policy-pinning
+++ b/test/integration/test-policy-pinning
@@ -407,7 +407,20 @@ testsuccessequal "coolstuff:
         500 file:${tmppath}/aptarchive stable/main all Packages" aptcache policy coolstuff
 
 
-
+msgmsg "Check that local-only versions can be pinned correctly (LP: #1821308)"
+echo "Package: coolstuff
+Pin: version 2.0~bpo1
+Pin-Priority: 1000" > rootdir/etc/apt/preferences
+testsuccessequal "coolstuff:
+  Installed: 2.0~bpo1
+  Candidate: 2.0~bpo1
+  Version table:
+     2.0~bpo2 100
+        100 file:${tmppath}/aptarchive backports/main all Packages
+ *** 2.0~bpo1 1000
+        100 ${tmppath}/rootdir/var/lib/dpkg/status
+     1.0 500
+        500 file:${tmppath}/aptarchive stable/main all Packages" aptcache policy coolstuff
 
 # Check for 0
 echo "Package: coolstuff

--- End Message ---
--- Begin Message ---
Julian Andres Klode:
> [...]
>>
>>
>> Hi,
>>
>> Please go ahead with the upload and remove the moreinfo tag when it is
>> in unstable and ready to be unblocked.
> 
> Done.
> 

Unblocked, thanks.
~Niels

--- End Message ---

Reply to: