Opened 11 days ago

Last modified 9 days ago

#1426 new enhancement

drivedb.h: update-smart-drivedb --local-dir option

Reported by: Paul Wise Owned by:
Priority: minor Milestone: Release 7.3
Component: all Version:
Keywords: Cc: onlyjob

Description

I think it would be nice if the Debian package maintainer did not have to re-implement the checks implemented by update-smart-drivedb (including the ones suggested in #1424) in the Debian postinstall script, so I suggest that a --local-dir option for update-smart-drivedb could be used to make it look at a local directory for the drivedb.h copy installed by the Debian package, perform the necessary checks and then update the canonical drivedb.h in /var. Then the Debian postinstall script could just run update-smart-drivedb --local-dir, passing the directory in the package where the necessary files are installed.

I have CCed onlyjob, the Debian package maintainer.

Change History (5)

comment:1 Changed 11 days ago by Christian Franke

Component: drivedball
Milestone: Release 7.3

comment:2 Changed 11 days ago by Christian Franke

Adding this to update-smart-drivedb will take some time due to required refactorings.

For now, here is a standalone script:

#!/bin/sh
set -e

test $# = 2 || { echo "Usage: $0 SOURCE_DB DEST_DB"; exit 1; }
src=$1; dst=$2

get_db_version()
{
  local r v x
  x=$(sed -n '/^[ {]*"VERSION: *[^"]*"/{s,^[ {]*"VERSION: \([1-9][./0-9]* [^"]*\)".*$,\1,p;q}' "$1")
  v=${x%% *}
  test -n "$v" || return 0
  if [ "${v%/*}" = "$v" ]; then # trunk: get rev from expanded SVN-Id
    r=$(echo "$x" | sed -n 's,^[^$]*$Id: drivedb\.h \([1-9][0-9]*\) .*$,\1,p')
    test -n "$r" || return 0
    v="$v/$r"
  fi
  echo "$v"
}

a=$(get_db_version "$src")
test -n "$a" || { echo "$src: VERSION information not found"; exit 1; }
b=$(test ! -e "$dst" || get_db_version "$dst")
test -n "$b" || b="0/0"

upd=true
if [ "${a#*/}" -lt "${b#*/}" ]; then
  if [ "${a%%/*}" = "${b%%/*}" ]; then
    upd=false
  else
    echo "Warning: $dst: requires downgrade due to branch change, run update-smart-drivedb" >&2
  fi
fi

if $upd; then
  echo "$dst: $b replaced with $a"
  cp -f "$src" "$dst"
  rm -f "$dst.raw" "$dst.raw.asc"
else
  echo "$dst: $b not replaced with $a"
fi

comment:3 Changed 10 days ago by Paul Wise

I forgot to mention that enabling the --local-dir option should disable the signature checks because there are multiple types of use-cases for this:

The Debian package does not include the signatures for drivedb.h.

The Debian drivedb.h could be patched compared to upstream, say in a Debian stable release or similar.

The user could be trying to install their own custom drivedb.h.

comment:4 Changed 9 days ago by Christian Franke

--no-verify could already be used to disable signature checks. Proposed syntax:

update-smart-drivedb [--no-verify] --local /src/dir/drivedb.h [/dest/dir/drivedb.h]

If --no-verify is not specified, /src/dir/drivedb.h.raw.asc must exist. This enables another use case: Offline updates for machines without internet connection.

comment:5 Changed 9 days ago by Paul Wise

Sounds good to me.

Note: See TracTickets for help on using tickets.