Blog

03/06/2019

How to run a command or script after running apt-get command on a Debian or Ubuntu Linux



How do I run custom command after ‘apt-get upgrade‘ or ‘apt-get dist-upgrade‘ on a Debian or Ubuntu Linux based system? How do I hook a script to apt-get command on my Ubuntu Linux server?

You can configure the apt-get command using /etc/apt/apt.conf file or place configuration in a special directory at /etc/apt/apt.conf.d/. The following two options allows you to run shell commands or script before/after invoking dpkg/apt-get tools:

DPkg::Post-Invoke

The syntax is:

# This is a list of shell commands to run after invoking dpkg/apt-get #
DPkg::Post-Invoke {"command";};
DPkg::Post-Invoke {"/path/to/sbin/command";};
DPkg::Post-Invoke {"/path/to/script";};

DPkg::Pre-Invoke

The syntax is:

# This is a list of shell commands to run before invoking dpkg/apt-get #
DPkg::Pre-Invoke {"command";};
DPkg::Pre-Invoke {"/path/to/sbin/command";};
DPkg::Pre-Invoke {"/path/to/script";};

Like options this must be specified in list notation. The commands are invoked in order using /bin/sh; should any fail APT will abort.

Examples

In this example auto re-mounting of a readonly /use/ folder so that apt-get will work properly. Edit or create a file called /etc/apt/apt.conf.d/100update:
$ sudo vi /etc/apt/apt.conf.d/100update
Append/edit as follows:

   Pre-Invoke {"/bin/mount -o remount,rw /usr/";};
   Post-Invoke {"/bin/mount -o remount,ro /usr/";};

Another example:

  Update
  {
     Pre-Invoke {"touch /var/lib/apt/pre-update-stamp"; };
     Post-Invoke {"touch /var/lib/apt/post-update-stamp"; };
  };

Running or hooking a custom script to apt-get on a Debian or Ubuntu Linux server

In this example I want to run the following script (/root/bin/php7helper) so that I can patch config file upon running apt-get command:

#!/bin/bash
# Name: /root/bin/php7helper
# Purpose: A shell script to patch php 7 fpm on Ubuntu serer
# Author: SXI ADMIN <sxi.io> under GPL version 2+
# ------
function update_php7(){
	local u="cyberciti"  # new user name
	local r="www-data"   # old user name
	local f="/usr/lib/tmpfiles.d/php7.0-fpm.conf" # config file
	local wrcmd="/etc/init.d/lighttpd restart"    # restart services
	local prcmd="/etc/init.d/php7.0-fpm restart"
	# patch it
	echo "$0: Patching $f..."
	sed -i "s/$r/$u/g" $f  
	# restart it
	$prcmd
	$wrcmd
}
# main #
update_php7

Create a file called /etc/apt/apt.conf.d/80upgradehook:
$ cat /etc/apt/apt.conf.d/80upgradehook
Sample outputs:

DPkg::Post-Invoke {"/root/bin/php7helper";};

Now simply run the apt-get upgrade command and the script /root/bin/php7helper will get executed:
$ sudo apt-get upgrade
Sample outputs:

Fig.01: apt-get hook called a script called /root/bin/php7helper after running it

See man pages for more info – dpkg(1)

Posted by: SXI ADMIN

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

14/08/2019

How to KVM, QEMU start or stop virtual machine from command line (CLI)

KVM or Kernel Based Virtual Machine is a popular virtualization technology. It allows you to run virtual guest machines over a host machine. To start...
14/08/2019

How to Docker backup Saving and restoring your volumes

Running a Docker volume backup First, we spin up a temporary container, and we mount the backup folder and the target Docker volume to this container....
12/08/2019

How to Start and Enable Firewalld on CentOS 7

In this article, we discuss how to start and enable firewalld. It is highly recommended that you have a firewall protecting your server.Pre-Flight CheckThese...