[Debian] Re: Bug#417540: fixes

Ola Lundqvist ola at opalsys.net
Fri Apr 13 12:36:26 EDT 2007


Hi

On Fri, Apr 13, 2007 at 07:59:21PM +0400, Kir Kolyshkin wrote:
> Ola Lundqvist wrote:
> >Hi Kir
> >
> >On Fri, Apr 13, 2007 at 06:16:25PM +0400, Kir Kolyshkin wrote:
> >  
> >>I see two distinct problems described in this bug report:
> >>1. simfs not loaded
> >>2. (enhancement) check running kernel config
> >>
> >>Both are fixed in vzctl git.
> >>
> >>Check for kernel config options:
> >>http://git.openvz.org/?p=vzctl;a=commit;h=8adf5dcc9dda2f621d6df7cec88ad6ab16bb5041
> >>
> >>Loading simfs module:
> >>http://git.openvz.org/?p=vzctl;a=commit;h=f09fd723bbe70d98b772bd9d13fdf844d14cad59
> >>    
> >
> >Thanks a lot for this information.
> >
> >  
> >>Will be available in vzctl-3.0.17. The only thing I'm not sure about if 
> >>this initscript (etc/init.d/vz-redhat.in) is used by Debian.
> >>    
> >
> >Yes it is, but with a patch. Maybe you can include that as well? About half
> >of it is compatible with redhat, but something need to be done about this
> >subsys thing that do not exist in debian. Is that directory really needed?
> >  
> By Red Hat standards -- yes. But we can determine the distro runtime and 
> fix the appropriate variables, can't we?

Yes. :)

> Can I rely on Debian having /etc/debian.version and 
> /lib/lsb/init-functions (and not having /etc/init.d/functions and 
> /etc/rc.status)?

No... On sarge:

ls -l /lib/lsb/init-functions
ls: /lib/lsb/init-functions: File or directory not found

ls -l /etc/debian.version
... same thing

> If yes -- patch is attached for your review (against the latest vzctl 
> git). For convenience, I'm also attaching the actual script.

I think it is better to check for the actual directory needed, that is
/var/run/subsys. :) If it is not found, use /var/run instead.

Regards,

// Ola

> >At least short description and force-reload should be possible to include
> >in the RedHat version. :)
> >
> >The patch is as follows:
> >
> >--- vzctl-3.0.16.orig/etc/init.d/vz-redhat.in
> >+++ vzctl-3.0.16/etc/init.d/vz-redhat.in
> >@@ -1,4 +1,4 @@
> >-#!/bin/sh
> >+#!/bin/bash
> >  
> 
> Why you change it to bash? Is there something bash-specific in the 
> script? If yes, I'd like to kill it out.
> 
> > #  Copyright (C) 2000-2007 SWsoft. All rights reserved.
> > #
> > #  This program is free software; you can redistribute it and/or modify
> >@@ -30,6 +30,7 @@
> > # Default-Start: 2 3 5
> > # Default-Stop:
> > # Description: OpenVZ startup script.
> >+# Short-Description: OpenVZ startup script
> > ### END INIT INFO
> >                                                                                                               
> >                                                                                                               
> >@@ -43,7 +44,7 @@
> >                                                                                                               
> > VZCTL=@SBINDIR@/vzctl
> > VZQUOTA=@SBINDIR@/vzquota
> >-LOCKFILE=/var/lock/subsys/vz_lock
> >+LOCKFILE=/var/lock/vz_lock
> > VESTAT=/proc/vz/vestat
> > PRELOAD_MODULES=
> > MODULES=
> >@@ -422,7 +423,7 @@
> >                print_failure
> >                return 1
> >        fi
> >-       if [ -f /var/lock/subsys/vz ]; then
> >+       if [ -f /var/lock/vz ]; then
> >                __echo "OpenVZ already running"
> >                print_failure
> >                return 1
> >@@ -463,7 +464,7 @@
> >        ve_start
> >                                                                                                               
> >        rm -f $LOCKFILE
> >-       touch /var/lock/subsys/vz
> >+       touch /var/lock/vz
> > }
> >                                                                                                               
> > function stop()
> >@@ -487,7 +488,7 @@
> >        done
> >        print_success
> >        rm -f $LOCKFILE
> >-       rm -f /var/lock/subsys/vz
> >+       rm -f /var/lock/vz
> > }
> >                                                                                                               
> > function load_modules()
> >@@ -511,6 +512,10 @@
> >   stop)
> >        stop
> >        ;;
> >+  force-reload)
> >+        stop
> >+       start
> >+        ;;
> >   restart)
> >        stop
> >        start
> >
> >
> >Regards,
> >
> >// Ola
> >
> >  
> >
> >  
> 


> #!/bin/sh
> #  Copyright (C) 2000-2007 SWsoft. All rights reserved.
> #
> #  This program is free software; you can redistribute it and/or modify
> #  it under the terms of the GNU General Public License as published by
> #  the Free Software Foundation; either version 2 of the License, or
> #  (at your option) any later version.
> #
> #  This program is distributed in the hope that it will be useful,
> #  but WITHOUT ANY WARRANTY; without even the implied warranty of
> #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> #  GNU General Public License for more details.
> #
> #  You should have received a copy of the GNU General Public License
> #  along with this program; if not, write to the Free Software
> #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> #
> #
> # OpenVZ startup script
> 
> ###
> # chkconfig: 2345 96 88
> # description: OpenVZ startup script.
> ###
> 
> ### BEGIN INIT INFO
> # Provides: vz
> # required-start: $network $remote_fs $local_fs sshd
> # required-stop:
> # Default-Start: 2 3 5
> # Default-Stop:
> # Description: OpenVZ startup script.
> # Short-Description: OpenVZ startup script
> ### END INIT INFO
> 
> 
> # This line is needed to cheat /etc/init.d/rc who expects action word
> 
> VZCONF=/home/kir/git-local/vzctl/inst/etc/vz/vz.conf
> 
> [ -f ${VZCONF}   ] || exit 0
> . ${VZCONF}
> [ "${VIRTUOZZO}" = "no" ] && exit 0
> 
> VZCTL=/home/kir/git-local/vzctl/inst/sbin/vzctl
> [ -x ${VZCTL} ] || exit 0
> 
> VZQUOTA=/home/kir/git-local/vzctl/inst/sbin/vzquota
> CONFIG_DIR=/home/kir/git-local/vzctl/inst/etc/vz/conf
> LOCKFILE=/var/lock/subsys/vz_lock
> SUBSYS_VZ=/var/lock/subsys/vz
> VESTAT=/proc/vz/vestat
> VZDEV=venet0
> PRELOAD_MODULES=
> MODULES=
> MODULES_OTHER=
> NET_MODULES=
> IPT_MODULES=
> 
> if [ "${MODULES_DISABLED}" != "yes" ]; then
> 	PRELOAD_MODULES="af_packet"
> 	MODULES="vzmon vzdquota vzdev"
> 	CPT_MODULES="vzcpt vzrst"
> 	MODULES_OTHER="vzcompat ${CPT_MODULES}"
> 	VNET_MODULES="vznetdev vznet"
> 	VETH_MODULES="vzethdev"
> 	NET_MODULES="${VNET_MODULES} ${VETH_MODULES}"
> 	if [ "${VZWDOG}" = "yes" ]; then
> 		MODULES="${MODULES} vzwdog"
> 	fi
> 	IPT_MODULES="ip_tables ${IPTABLES} xt_tcpudp"
> 	VZFS_MODULES="simfs"
> fi
> 
> 
> rc_done='..done'
> rc_failed='..failed'
> # Source function library.
> if [ -r /etc/init.d/functions ]; then
> 	source /etc/init.d/functions
> 	if [ -r /etc/redhat-release ] || [ -r /etc/centos-release ]; then
> 		DISTR=redhat
> 	fi
> elif [ -r /etc/rc.status ]; then
> 	source /etc/rc.status
> 	if [ -r /etc/SuSE-release ]; then
> 		DISTR=suse
> 	fi
> elif [ -r /lib/lsb/init-functions ]; then
> 	source /lib/lsb/init-functions
> 	if [ -f /etc/debian.version ]; then
> 		DISTR=debian
> 		LOCKFILE=/var/lock/vz_lock
> 		SUBSYS_VZ=/var/lock/vz
> 	fi
> fi
> 
> VEINFO=""
> RETVAL=0
> # Number of the parallel VEs on stop.
> # In case empty value the number of parallel VEs calculated as 'num_cpu * 4'
> PARALLEL=
> cd /
> 
> # We used to install OpenVZ cron job when the vzctl package was
> # installed, irrespective of whether OpenVZ was actually being
> # run. Although the cron jobs didn't create any problems if someone
> # wasn't running OpenVZ some users complained about the cron log file
> # filling up, resource usage, and power consumption since systems
> # wouldn't really idle. It really only makes sense to run the OpenVZ
> # cron job if the vz service is turned on and not just merely
> # having the package installed. This init.d script is an obvious place
> # to install or remove the cron jobs based on the service
> # being enabled or not.
> SRC_CRONSCRIPT_DIR=/home/kir/git-local/vzctl/inst/etc/vz/cron
> DST_CRONSCRIPT_DIR=/home/kir/git-local/vzctl/inst/etc/cron.d
> 
> check_old_cron_files()
> {
> 	# avoid double OpenVZ cron settings
> 	local f
> 	for f in vpsreboot vpsnetclean; do
> 		[ -f $DST_CRONSCRIPT_DIR/$f ] && rm -f $DST_CRONSCRIPT_DIR/$f
> 	done
> }
> 
> setup_cron()
> {
> 	check_old_cron_files
> 	[ -z "$SRC_CRONSCRIPT_DIR" ] && return
> 	[ -d "$SRC_CRONSCRIPT_DIR" ] || return
> 	install -m644 -o root -g root $SRC_CRONSCRIPT_DIR/vz \
> 		$DST_CRONSCRIPT_DIR
> }
> 
> remove_cron()
> {
> 	check_old_cron_files
> 	[ -z "$SRC_CRONSCRIPT_DIR" ] && return
> 	[ -d "$SRC_CRONSCRIPT_DIR" ] || return
> 	cat > $DST_CRONSCRIPT_DIR/vz <<EOF
> # DO NOT EDIT THIS FILE!
> #
> # Contents of this file managed by /etc/init.d/vz script
> # Master copy is $SRC_CRONSCRIPT_DIR/vz.
> # Consult that file for documentation.
> EOF
> }
> 
> check_kernel()
> {
> 	if ! [ test -d /proc/vz ]; then
> 		print_failure "Running kernel is not OpenVZ kernel."
> 		exit 1
> 	fi
> }
> 
> check_kernel_config()
> {
> 	test -r /proc/config.gz || return 0
> 
> 	local conf opt err=0
> 	local opt_must="SIM_FS VE VE_CALLS VZ_GENCALLS VZ_DEV"
> #	local opt_rec="SCHED_VCPU FAIRSCHED VZ_QUOTA VZ_QUOTA_UGID VE_NETDEV VE_ETHDEV
> #			VE_IPTABLES VZ_CHECKPOINT VZ_WDOG"
> 
> 	conf=$(zcat /proc/config.gz 2>/dev/null | grep -E -v '^#|^$') || return 0
> 
> 	for opt in opt_must; do
> 		if ! echo "$conf" | grep -q "${opt}="; then
> 			__echo "Missing kernel config option: CONFIG_$opt"
> 			err=1
> 		fi
> 	done
> 	if [ err != 0 ]; then
> 		print_failure "Please recompile your kernel."
> 		exit 1
> 	fi
> }
> 
> get_parallel()
> {
> 	[ -n "${PARALLEL}" ] && return
> 	PARALLEL=`awk '
> BEGIN { num=0; }
> $1 == "processor" { num++; }
> END { print num * 4; }' /proc/cpuinfo`
> }
> 
> get_veinfo()
> {
> 	if [ -f /proc/vz/veinfo ]; then
> 		VEINFO=/proc/vz/veinfo
> 	elif [ -f /proc/veinfo ]; then
> 		VEINFO=/proc/veinfo
> 	elif [ ! -f $VESTAT ]; then
> 		return 1
> 	fi
> 	return 0
> }
> 
> print_success()
> {
> 	if [ "$DISTR" = "redhat" ]; then
> 		echo_success
> 	elif [ "$DISTR" = "debian" ]; then
> 		: # do nothing
> 	else
> 		echo -n "$rc_done"
> 	fi
> 	echo
> }
> 
> print_failure()
> {
> 	if [ "$DISTR" = "debian" ]; then
> 		log_failure_msg $1
> 		return
> 	fi
> 	echo -n "$1"
> 	if [ "$DISTR" = "redhat" ]; then
> 		failure $"$1"
> 	else
> 		echo -n "$rc_failed"
> 	fi
> 	echo
> }
> 
> __echo()
> {
> 	if [ "$DISTR" = "redhat" ]; then
> 		echo -n $"$1"
> 	else
> 		echo -n "$1"
> 	fi
> }
> 
> status()
> {
> 	check_kernel
> 
> 	if get_veinfo && [ -f $SUBSYS_VZ ]; then
> 		echo "OpenVZ is running..."
> 		return 0
> 	else
> 		echo "OpenVZ is stopped."
> 		return 3
> 	fi
> }
> 
> start_net()
> {
> 	local mod
> 
> 	if ip a l | grep -q "venet0:.*UP" 2>/dev/null; then
> 		return 0
> 	fi
> 	# load all kernel modules needed for VE networking
> 	for mod in ${NET_MODULES}; do
>         	modprobe ${mod} 2>/dev/null
> 	done
> 	get_veinfo
> 	if [ -z "$VEINFO" ]; then
> 		return 0
> 	fi
> 	__echo "Bringing up interface $VZDEV: " 
> 	ip link set $VZDEV up 
> 	if [ $? -eq 0 ] ; then
> 		print_success
> 	else
> 		print_failure
> 	fi
> 	ip addr add 0.0.0.0/0 dev $VZDEV
> 	__echo "Configuring interface $VZDEV: "
> 	sysctl -q -w net.ipv4.conf.$VZDEV.send_redirects=0
> 	if [ $? -eq 0 ] ; then
> 		print_success
> 	else
> 		print_failure
> 	fi
> 	if [ "${IPV6}" = "yes" ]; then
> 		__echo "Configuring ipv6 $VZDEV: "
> 		# Fix me: ip addres should be generated
> 		ip -6 addr add fe80::1/128 dev $VZDEV
> 		if [ $? -eq 0 ] ; then
> 			print_success
> 		else
> 			print_failure
> 		fi
> 	fi
> }
> 
> stop_net()
> {
> 	local mod
> 
> 	if ip a l | grep -q "venet0:.*UP" 2>/dev/null; then
> 		__echo "Bringing down interface $VZDEV: " 
> 		ip link set $VZDEV down 
> 		if [ $? -eq 0 ] ; then
> 			print_success
> 		else
> 			print_failure
> 		fi
> 	fi
> 	for mod in ${NET_MODULES}; do
> 		/sbin/modprobe -r ${mod} > /dev/null 2>&1
> 	done
> }
> 
> setup_ve0()
> {
> 	if test -z "${VE0CPUUNITS}"; then
> 		echo "Warning: VE0CPUUNITS is not set in ${VZCONF}; using value of 1000"
> 		VE0CPUUNITS=1000
> 	fi
> 	msg=`${VZCTL} set 0 --cpuunits ${VE0CPUUNITS} 2>&1`
> 	if [ $? -ne 0 ]; then
> 		print_failure "vzctl set 0 --cpuunits ${VE0CPUUNITS} failed: $msg"
> 	fi
> 
> 	if ! test -f "${CONFIG_DIR}/0.conf"; then
> 		return
> 	fi
> 	if ! grep -q '^ONBOOT=yes\|^ONBOOT=\"yes\"' ${CONFIG_DIR}/0.conf;
> 	then
> 		return
> 	fi
> 	__echo "Configure node UB resources: "
> 	msg=`$VZCTL set 0 --reset_ub 2>&1`
> 	if [ $? -eq 0 ]; then
> 		print_success
> 	else
> 		print_failure "$msg"
> 	fi
> }
> 
> start_ves()
> {
> 	local veid
> 	local velist
> 	local msg
> 	local need_restart
> 
> 	need_restart=""
> 	cd ${CONFIG_DIR} || return
> 	velist=`grep -l '^ONBOOT=yes\|^ONBOOT=\"yes\"' [0-9]*.conf 2>/dev/null | \
> 		sed -e 's/.conf//g' | sort -n`
> 	cd - >/dev/null
> 	sysctl -q -w net.ipv4.route.src_check=0
> 	for veid in $velist; do
> 		[ "${veid}" = "0" ] && continue 
> 		__echo "Starting VE ${veid}: "
> 		if [ "x${VZFASTBOOT}" = "xyes" -a "x${DISK_QUOTA}" = "xyes" ]; 
> 		then
> 			$VZQUOTA stat ${veid} >/dev/null 2>&1
> 			if [ $? -eq 6 ]; then
> 				if $VZQUOTA show ${veid} 2>&1 | grep "vzquota : (warning) Quota is running" >/dev/null 2>&1; then
> 					$VZQUOTA on ${veid} --nocheck >/dev/null 2>&1
> 					need_restart="${need_restart} ${veid}"
> 				fi
> 			fi
> 		fi
> 		msg=`$VZCTL start ${veid} 2>&1`
> 		if [ $? -eq 0 ]; then
> 			print_success
> 		else
> 			print_failure "$msg"
> 		fi
> 	done
> 	for veid in ${need_restart}; do
> 		__echo "Stopping VE ${veid}: "
> 		$VZCTL stop ${veid} 2>&1 >/dev/null 2>&1
> 		if [ $? -eq 0 ]; then
> 			print_success
> 		else
> 			print_failure "$msg"
> 		fi
> 		__echo "Starting VE ${veid}: "
> 		msg=`$VZCTL start ${veid} 2>&1`
> 		if [ $? -eq 0 ]; then
> 			print_success
> 		else
> 			print_failure "$msg"
> 		fi
> 	done
> }
> 
> stop_ves()
> {
> 	local veid
> 	local velist
> 	local msg
> 	local m
> 	local mounts
> 	local fail
> 	local iter
> 	local quota
> 	local pids
> 
> 	if get_veinfo; then
> 		get_parallel
> 		for ((i = 0; i <= 2; i++)); do
> 			iter=0;
> 			pids=
> 			velist=`awk '$1 != "VEID" && $1 != "Version:" {print $1}' ${VESTAT}`
> 			for veid in $velist; do
> 				echo "Shutting down VE $veid"
> 				# Set fairsched parameters to maximum so
> 				# VE will stop fast
> 				$VZCTL set $veid --cpuunits 2000 --cpulimit 0 >/dev/null 2>&1
> 				$VZCTL --skiplock stop $veid >/dev/null 2>&1 &
> 				pids="$pids $!"
> 				let iter++
> 				if [ ${iter} -gt ${PARALLEL} ]; then
> 					for pid in ${pids}; do
> 						wait ${pid}
> 					done
> 					pids=
> 					iter=0
> 				fi
> 			done
> 			for pid in $pids; do
> 				wait $pid
> 			done
> 		done
> 	fi
> 	iter=0
> 	fail=1
> 	while test $iter -lt 5 -a $fail -ne 0; do
> 		fail=0
> 		mounts=`awk '{if ($3=="simfs") print $2}' /proc/mounts`
> 		for m in $mounts; do
> 			__echo "Unmounting VE area "
> 			echo -n $m
> 			msg=`umount $m 2>&1`
> 			if [ $? -eq 0 ]; then
> 				print_success
> 			else
> 				print_failure "$msg"
> 				fail=$((fail+1))
> 				fuser -k -m ${m} > /dev/null 2>&1
> 			fi
> 		done
> 		iter=$((iter+1))
> 	done
> 	# turn quota off
> 	quota=`awk -F: '/^[0-9]+:/{print $1}' /proc/vz/vzquota 2>/dev/null`
> 	for m in ${quota}; do
> 		__echo "Turn quota off for VE "
> 		echo -n $m
> 		msg=`vzquota off ${m} 2>&1`
> 		if [ $? -eq 0 ]; then
> 			print_success
> 		else
> 			print_failure "$msg"
> 		fi
> 	done
> }
> 
> lockfile()
> {
>         local TEMPFILE="${1}.$$"
>         local LOCKFILE="${1}"
> 
> 	trap -- "rm -f ${LOCKFILE} ${TEMPFILE}" EXIT
> 
>         echo $$ > ${TEMPFILE} 2> /dev/null || {
> 		echo "Can't write to ${TEMPFILE}"
>         }
>     	ln ${TEMPFILE} ${LOCKFILE} >/dev/null 2>&1 && {
>             	rm -f ${TEMPFILE};
>             	return 0;
>     	}
> 	kill -0 `cat $LOCKFILE` >/dev/null 2>&1 && {
> 		return 1;
>     	}
>     	ln ${TEMPFILE} ${LOCKFILE} >/dev/null 2>&1 && {
>             	rm -f ${TEMPFILE};
>             	return 0;
>     	}
> 	rm -f ${LOCKFILE}
>         echo $$ > ${LOCKFILE}
> 	return 0
> }
> 
> start()
> {
> 	local veid
> 	local velist
> 	local msg
> 	local mod
> 
> 	check_kernel
> 	check_kernel_config
> 
> 	if ! lockfile $LOCKFILE; then
> 		__echo "OpenVZ is locked"
> 		print_failure
> 		return 1
> 	fi
> 	if [ -f ${SUBSYS_VZ} ]; then
> 		__echo "OpenVZ already running"
> 		print_failure
> 		return 1
> 	fi
> 	__echo "Starting OpenVZ: "
> 	load_modules "${IPT_MODULES}"
> 	for mod in $PRELOAD_MODULES; do
> 		/sbin/modprobe -r $mod >/dev/null 2>&1
> 		/sbin/modprobe $mod >/dev/null 2>&1
> 	done
> 	for mod in $MODULES; do
> 		/sbin/modprobe $mod >/dev/null 2>&1
> 		RETVAL=$?
> 		if [ $RETVAL -ne 0 ]; then
> 			print_failure "failed to load module ${mod}"
> 			return $RETVAL
> 		fi
> 	done
> 	load_modules "${MODULES_OTHER} ${VZFS_MODULES}"
> 	print_success "loading OpenVZ modules"
> 
> 	if [ ! -e /dev/vzctl ]; then
> 		# On most modern distros udev will create a device for you,
> 		# while on the old distros /dev/vzctl comes with vzctl rpm.
> 		# So the below mknod call is probably not needed at all.
> 		/bin/mknod -m 600 /dev/vzctl c 126 0 > /dev/null 2>&1
> 		RETVAL=$?
> 		if [ $RETVAL -ne 0 ]; then
> 			print_failure "creating /dev/vzctl"
> 			return $RETVAL
> 		fi
> 	fi
> 	
> 	start_net
> 	setup_ve0
> 	setup_cron
> 	start_ves
> 	
> 	rm -f $LOCKFILE
> 	touch $SUBSYS_VZ
> }
> 
> stop()
> {
> 	local mod
> 
> 	if ! lockfile $LOCKFILE; then
> 		__echo "OpenVZ is locked"
> 		print_failure
> 		RETVAL=1
> 		return 1
> 	fi
> 
> 	stop_ves
> 	remove_cron
> 	stop_net
> 	__echo "Stopping OpenVZ: "
> 	for mod in ${MODULES_OTHER} ${PRELOAD_MODULES} ${IPT_MODULES} ${VZFS_MODULES}; do
> 		/sbin/modprobe -r ${mod} > /dev/null 2>&1
> 	done
> 	rm -f $LOCKFILE
> 	rm -f $SUBSYS_VZ
> 	print_success
> }
> 
> load_modules()
> {
> 	local modules=$1
> 	local mod
> 
> 	for mod in ${modules}; do
> 		if /sbin/lsmod | grep -qw ${mod}; then
> 			continue
> 		fi
> 		/sbin/modprobe ${mod} >/dev/null 2>&1
> 	done
> }
> 
> # See how we were called.
> case "$1" in
>   start)
>   	start
> 	;;
>   stop)
> 	stop
> 	;;
>   force-reload)
> 	stop
> 	start
> 	;;
>   restart)
> 	stop
> 	start
> 	;;
>   status)
>   	status
> 	RETVAL=$?
> 	;;
>   *)
>   	echo "Usage: $0 {start|stop|status|restart}"
> 	exit 1
> esac
> 
> exit $RETVAL


-- 
 --- Ola Lundqvist systemkonsult --- M Sc in IT Engineering ----
/  ola at opalsys.net                   Annebergsslingan 37        \
|  opal at debian.org                   654 65 KARLSTAD            |
|  http://opalsys.net/               Mobile: +46 (0)70-332 1551 |
\  gpg/f.p.: 7090 A92B 18FE 7994 0C36 4FE4 18A1 B1CF 0FE5 3DD9  /
 ---------------------------------------------------------------


More information about the Debian mailing list