meta données pour cette page
  •  

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
schplurtziel:menageatator [2017/02/17 06:50]
ztrulphcs créée
schplurtziel:menageatator [2020/12/28 08:09] (Version actuelle)
ztrulphcs [Utilisation / Usage] présentation
Ligne 1: Ligne 1:
 ====== Menageatator ====== ====== Menageatator ======
  
-2017-02-17+2017-10-26
  
 <WRAP column 45%> <WRAP column 45%>
Ligne 15: Ligne 15:
  
 <WRAP column 45%> <WRAP column 45%>
-On pourrait croire que le problème est réglé depuis longtemps, mais, de temps en temps pour des raisons bizarres, je tombe toujours sur des ordinaeurs dont les noyaux ne sont jamais désinstallés par apt ou //unattended-upgrades//.+On pourrait croire que le problème est réglé depuis longtemps, mais, de temps en temps pour des raisons bizarres, je tombe toujours sur des ordinateurs dont les noyaux ne sont jamais désinstallés par apt ou //unattended-upgrades//.
  
-Le script ci dessous est très simple, mais aussi très efficace. il considère que tous les noyaux installés sont effaceables sauf :+Le script ci dessous est très simple, mais aussi très efficace. il considère que tous les noyaux installés sont effaçables sauf :
   * le noyaux utilisé   * le noyaux utilisé
   * les noyaux provenant de paquet //on hold//   * les noyaux provenant de paquet //on hold//
   * le dernier   * le dernier
   * l'avant dernier si on tourne en ce moment sur le dernier   * l'avant dernier si on tourne en ce moment sur le dernier
 +  * les noyaux à moitié installé ou cassés
  
 Il conservera donc au moins deux noyaux, dont le dernier et celui en cours. Il conservera donc au moins deux noyaux, dont le dernier et celui en cours.
Ligne 36: Ligne 37:
   * the most recent one   * the most recent one
   * the last but one when the current kernel is the most recent one   * the last but one when the current kernel is the most recent one
 +  * half installed or broken kernels
  
 It keeps at least two kernels : the running one and, apart from this, the most recent. It keeps at least two kernels : the running one and, apart from this, the most recent.
Ligne 45: Ligne 47:
  
 <code bash menageatator> <code bash menageatator>
-#! /bin/sh+#! /bin/bash
 # encoding: utf-8 # encoding: utf-8
 # vim: se ts=2 sw=2 et: # vim: se ts=2 sw=2 et:
  
 # menageatator: Remove unneeded linux kernel from debuntu systems # menageatator: Remove unneeded linux kernel from debuntu systems
 +# http://schplurtz.free.fr/wiki/schplurtziel/menageatator
 #   #  
-                     Copyright Schplurtz Le Déboulonné, 2016+              Copyright Schplurtz Le Déboulonné, 2016, 2017, 2019
 #   #  
 #                  Schplurtz le Déboulonné <Schplurtz@laposte.net> #                  Schplurtz le Déboulonné <Schplurtz@laposte.net>
Ligne 115: Ligne 118:
 #  les termes.                         | #  les termes.                         |
  
-# Yeah I know. Could use ruby/perl/ocam/lua/go/python and less pipes. +# Yeah I know. Could use ruby/perl/ocam/lua/python/whatever and less pipes. 
-# Could use array, associative arrays etc... Just prefering simplicity+# Could use array, associative arrays etc... Just prefering simplicity,
 # clarity and possibility to run with dumb^Wsimple shells.  # clarity and possibility to run with dumb^Wsimple shells. 
  
Ligne 131: Ligne 134:
 IFS="$(printf ' \t') IFS="$(printf ' \t')
 " "
 +# /sbin and /usr/sbin are usually not in cron PATH. add them
 +# if they're not present as dpkg will need commands there.
 +case "$PATH" in
 +(*:/usr/sbin|/usr/sbin:*|*:/usr/sbin:*) : ;;
 +(*) PATH="${PATH}:/usr/sbin" ;;
 +esac
 +case "$PATH" in
 +(*:/sbin|/sbin:*|*:/sbin:*) : ;;
 +(*) PATH="${PATH}:/sbin" ;;
 +esac
 +
 set -e # Stop on any error. set -e # Stop on any error.
  
Ligne 138: Ligne 152:
 no_suffix() { no_suffix() {
   sed -e 's/-[a-zA-Z_]*$//'    # remove suffix. (-generic, -lowlatency etc...)   sed -e 's/-[a-zA-Z_]*$//'    # remove suffix. (-generic, -lowlatency etc...)
 +}
 +
 +reject() {
 +  grep -v "$@"
 } }
  
Ligne 148: Ligne 166:
 # ii  linux-image-3.13.0-95-generic  | ii  linux-image-3.13.0-100-generic # ii  linux-image-3.13.0-95-generic  | ii  linux-image-3.13.0-100-generic
 # ii  linux-image-3.13.0-98-generic  | ii  linux-image-3.13.0-101-generic # ii  linux-image-3.13.0-98-generic  | ii  linux-image-3.13.0-101-generic
-  dpkg-query -W -f '${db:Status-Abbrev} ${package}\n' "$@" |+ 
 +# old dpkg-query (from ubuntu 12.04 lucid for example) don't support 
 +# ${db:Status-Abbrev}. We have to use ${Status} that's a real pain. 
 +# We have to convert things like "deinstall ok config-files" to 
 +# "rc " 
 +# examples : 
 +#     install ok installed linux-image-3.2.0-23-generic 
 +#     unknown ok not-installed linux-image-3.2.0-23-generic 
 +#     deinstall ok config-files linux-image-3.2.0-23-generic 
 +#     hold ok installed linux-image-3.2.0-23-generic 
 +# The sed script does this : 
 +  1) rewrite deinstall to removed 
 +#   2) replace the first 3 word by their initials in changing order 
 +#      fe "unknown ok not-installed" becomes "uno" (2 and 3 are swapped) 
 +#   3) in 3rd column, replace "o" by " "  
 +# Also we are not interested in uninstalled kernels, so we filter 
 +# out the kernels that dpkg has never touched : /^un / 
 +   
 +  dpkg-query -W -f '${Status} ${package}\n' "$@" 2>/dev/null | 
 +    sed -e 's/^deinstall/removed/ 
 +            s/^\(.\)[^ ]* *\(.\)[^ ]* *\(.\)[^ ]* */\1\3\2 / 
 +            s/^\(..\)o/\1 / 
 +           '
 +    reject '^un ' |
     sort -k 2,2V # always return list sorted by version number     sort -k 2,2V # always return list sorted by version number
-} 
- 
-reject() { 
-  grep -v "$@" 
 } }
  
Ligne 160: Ligne 197:
   apt-get "$@"   apt-get "$@"
 } }
 +ARGV=( "$@" ) # keep command line args for final apt-get command...
  
         linux_vers_tpl='[0-9]*.[0-9]*.[0-9]*-[0-9]*'         linux_vers_tpl='[0-9]*.[0-9]*.[0-9]*-[0-9]*'
Ligne 165: Ligne 203:
 linux_images_extra_tpl="linux-image-extra-${linux_vers_tpl}" linux_images_extra_tpl="linux-image-extra-${linux_vers_tpl}"
      linux_headers_tpl="linux-headers-${linux_vers_tpl}"      linux_headers_tpl="linux-headers-${linux_vers_tpl}"
 +     linux_modules_tpl="linux-modules-${linux_vers_tpl}"
  
 # list of all linux-image packages dpkg is aware of # list of all linux-image packages dpkg is aware of
Ligne 238: Ligne 277:
     "$linux_images_tpl" \     "$linux_images_tpl" \
     "$linux_images_extra_tpl" \     "$linux_images_extra_tpl" \
-    "$linux_headers_tpl" |        # list linux images, images-extra, headers +    "$linux_headers_tpl" \ 
-  grep -v '^h'                 # filter out packages on hold+    "$linux_modules_tpl" |        # list linux images, images-extra, headers, modules 
 +  reject '^h'                  # filter out packages on hold
   reject "$@" |                   # filter out those we keep   reject "$@" |                   # filter out those we keep
   awk '{ print $2 }'              # just keep name   awk '{ print $2 }'              # just keep name
Ligne 245: Ligne 285:
  
 # If there are kernels to remove, remove them # If there are kernels to remove, remove them
-{ test $# -gt 0 && _apt_get purge "$@" ; } || :+{ test $# -gt 0 && _apt_get "${ARGV[@]}" purge "$@" ; } || :
  
 # Given this list of kernel, # Given this list of kernel,
Ligne 259: Ligne 299:
 # performs these removal : # performs these removal :
 # apt-get purge linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-3.13.0-98-generic linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic # apt-get purge linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-3.13.0-98-generic linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic
 +</code>
 +
 +===== Utilisation / Usage =====
 +
 +<code>
 +sudo menageatator
 +</code>
 +<WRAP clear></WRAP>
 +
 +----- 
 +
 +<WRAP column 45%>
 +Si vous êtes brave et ne voulez pas confirmer les choix de menageatator
 +</WRAP>
 +<WRAP column 45%>
 +If you are brave and don't want to confirm menageatator choices
 +</WRAP>
 +
 +<WRAP clear/>
 +<code>
 +sudo menageatator -y
 </code> </code>