From c854fb7286544c042c186f146acf6d4c2edb5a55 Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Sat, 19 Mar 2005 02:10:38 +0000 Subject: [PATCH] initial checkin git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1940 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- util-vserver/doc/vunify-verbosity.txt | 23 +++++ util-vserver/lib/apidoc/list2xxx.descr | 4 + util-vserver/scripts/X | 131 ++++++++++++++++++++++++ util-vserver/src/vnet.c | 182 +++++++++++++++++++++++++++++++++ 4 files changed, 340 insertions(+) create mode 100644 util-vserver/doc/vunify-verbosity.txt create mode 100644 util-vserver/lib/apidoc/list2xxx.descr create mode 100644 util-vserver/scripts/X create mode 100644 util-vserver/src/vnet.c diff --git a/util-vserver/doc/vunify-verbosity.txt b/util-vserver/doc/vunify-verbosity.txt new file mode 100644 index 0000000..792411c --- /dev/null +++ b/util-vserver/doc/vunify-verbosity.txt @@ -0,0 +1,23 @@ +>=1 +-- + * skipping of normal, non-unified files + * general progress-messages + +>=2 +--- + * deunify/unify messages + * skip-reason + * more detailed progress-messages + +>=3 +-- + * skipping of already unified files + +>=4 +-- + * source of unification; when verbosity==4 -> vserver-id, else + physical path + +>=6 +--- + * skipping of dirs and dotfiles diff --git a/util-vserver/lib/apidoc/list2xxx.descr b/util-vserver/lib/apidoc/list2xxx.descr new file mode 100644 index 0000000..90e086a --- /dev/null +++ b/util-vserver/lib/apidoc/list2xxx.descr @@ -0,0 +1,4 @@ +When the \c `~' prefix is used, the bits will be unset, and the \c `^' +prefix specifies a bitnumber instead of a bitmask. A `~' after another +`~' will cancel both ones. The special values for \c NAME will be +recognized case insensitively. diff --git a/util-vserver/scripts/X b/util-vserver/scripts/X new file mode 100644 index 0000000..2bff4a3 --- /dev/null +++ b/util-vserver/scripts/X @@ -0,0 +1,131 @@ +## $Id$ --*- sh -*-- + +case "$(hostname -s)" in + ensc-pc) BASE=/mnt/nfs/src/util-vserver.devel;; + delenn) BASE=/mnt/home/ensc/src/util-vserver.devel;; + *) BASE=/home/ensc/src/util-vserver.devel;; +esac + +PACKAGE='util-vserver' +PACKAGE_BUGREPORT='enrico.scholz@informatik.tu-chemnitz.de' +PACKAGE_NAME='util-vserver' +PACKAGE_STRING='util-vserver 0.23.89.1' +PACKAGE_TARNAME='util-vserver' +PACKAGE_VERSION='0.23.89.1' + +__CONFDIR='/etc/vservers' +__INCLUDEDIR='/usr/include' +__INITRDDIR='/etc/init.d' +__LEGACYDIR=$BASE/scripts/legacy +__LIBDIR=/usr/lib +__LOCKDIR=/var/lock +__PKGLIBDEFAULTDIR=$BASE/distrib/misc +__PKGSTATEDIR='/var/run/vservers' +__PKGSTATEREVDIR='/var/run/vservers.rev' +__SBINDIR=$BASE/src +__SYSCONFDIR='/usr/local/etc' +__VSHELPERSTATEDIR='/var/run/vshelper' + +__DISTRIBDIR=$BASE/distrib +__PKGLIBDIR=$BASE/scripts +__RUNDIR=$__PKGSTATEDIR + +__DEFAULT_VSERVERDIR='/vservers' +__DEFAULT_VSERVERPKGDIR='/vservers/.pkg' + +_CAPCHROOT="$BASE/src/capchroot" +_CHAINECHO="$BASE/src/chain-echo" +_CHBIND="$BASE/src/chbind" +_CHCONTEXT="$BASE/scripts/chcontext" +_CHCONTEXT_COMPAT="$BASE/src/chcontext-compat" +_CHROOT_CAT="$BASE/src/chroot-cat" +_CHROOT_RM="$BASE/src/chroot-rm" +_EXEC_CD="$BASE/src/exec-cd" +_EXEC_ULIMIT="$BASE/src/exec-ulimit" +_FAKE_RUNLEVEL="$BASE/src/fakerunlevel" +_FILETIME="$BASE/src/filetime" +_INITSYNC_MINIT_START=: +_LIB_FUNCTIONS="$BASE/scripts/functions" +_LIB_VSERVER_SETUP_FUNCTIONS="$BASE/scripts/vserver-setup.functions" +_LIB_VSERVER_BUILD_FUNCTIONS="$BASE/scripts/vserver-build.functions" +_LIB_VSERVER_BUILD_FUNCTIONS_APT="$BASE/scripts/vserver-build.functions.apt" +_LIB_VSERVER_BUILD_FUNCTIONS_RPM="$BASE/scripts/vserver-build.functions.rpm" +_LIB_VSERVER_BUILD_FUNCTIONS_PKGMGMT="$BASE/scripts/vserver-build.functions.pkgmgmt" +_LOCKFILE="$BASE/src/lockfile" +_MASK2PREFIX="$BASE/src/mask2prefix" +_PKGMGMT="$BASE/scripts/pkgmgmt" +_READLINK="$BASE/src/readlink" +_REBOOTMGR="$BASE/src/rebootmgr" +_RPM_FAKE_SO="$BASE/src/.libs/rpm-fake.so" +_SAVE_CTXINFO="$BASE/src/save_ctxinfo" +_SAVE_S_CONTEXT="$BASE/scripts/legacy/save_s_context" +_SECURE_MOUNT="$BASE/src/secure-mount" +_SETATTR="$BASE/src/setattr" +_VAPT_GET="$BASE/scripts/vapt-get" +_VAPT_GET_WORKER="$BASE/scripts/vapt-get-worker" +_VATTRIBUTE="$BASE/src/vattribute" +_VCONTEXT="$BASE/src/vcontext" +_VKILL="$BASE/src/vkill" +_VLIMIT="$BASE/src/vlimit" +_VNAMESPACE="$BASE/src/vnamespace" +_VPKG="$BASE/scripts/vpkg" +_VPROCUNHIDE="$BASE/scripts/vprocunhide" +_VPS="$BASE/src/vps" +_VRPM="$BASE/scripts/vrpm" +_VRPM_PRELOAD="$BASE/scripts/vrpm-preload" +_VRPM_WORKER="$BASE/scripts/vrpm-worker" +_VSCHED="$BASE/src/vsched" +_VSERVER="$BASE/scripts/vserver" +_VSERVER_LEGACY="$BASE/scripts/legacy/vserver" +_VSERVER_BUILD="$BASE/scripts/vserver-build" +_VSERVER_INFO="$BASE/src/vserver-info" +_VSHELPER="$BASE/scripts/vshelper" +_VSHELPER_SYNC="$BASE/src/vshelper-sync" +_VSOMETHING="$BASE/scripts/vsomething" +_VUNAME="$BASE/src/vuname" +_VUNIFY="$BASE/src/vunify" +_VYUM="$BASE/scripts/vyum" +_VYUM_WORKER="$BASE/scripts/vyum-worker" + +_AWK="/bin/awk" +_CAT="/bin/cat" +_CHOWN="/bin/chown" +_CMP="/usr/bin/cmp" +_CP="/bin/cp" +_DIRNAME="/usr/bin/dirname" +_EGREP="/bin/egrep" +_ENV="/bin/env" +_GREP="/bin/grep" +_IP="/sbin/ip" +_IPTABLES="/sbin/iptables" +_LN="/bin/ln" +_LN_S="$_LN -s" +_MKDIR="/bin/mkdir" +_MKFIFO="/usr/bin/mkfifo" +_MKTEMP="/bin/mktemp" +_MKTEMPDIR="$_MKTEMP -d" +_MODPROBE="/sbin/modprobe" +_MOUNT="/bin/mount" +_MV="/bin/mv" +_NAMEIF="/sbin/nameif" +_NICE="/bin/nice" +_RM="/bin/rm" +_RMDIR="/bin/rmdir" +_RMMOD="/sbin/rmmod" +_SED="/bin/sed" +_SH="/bin/sh" +_TAC="/usr/bin/tac" +_TAR="/bin/tar" +_TOUCH="/bin/touch" +_TTY="/usr/bin/tty" +_UMOUNT="/bin/umount" +_VCONFIG="/sbin/vconfig" +_WC="/usr/bin/wc" +_WGET="/usr/bin/wget" + +# https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=106057 +WORKAROUND_106057=1 +# /var/lib/rpm is hardcoded into apt-get which does not honor the +# %_dbpath variable therefore +# http://distro2.conectiva.com.br/pipermail/apt-rpm/2003-October/001985.html +WORKAROUND_APT_DBPATH=1 diff --git a/util-vserver/src/vnet.c b/util-vserver/src/vnet.c new file mode 100644 index 0000000..99a13d8 --- /dev/null +++ b/util-vserver/src/vnet.c @@ -0,0 +1,182 @@ +// $Id$ --*- c -*-- + +// Copyright (C) 2004 Enrico Scholz +// +// 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; version 2 of the License. +// +// 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. + + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include "util.h" +#include +#include +#include +#include + +#define ENSC_WRAPPERS_PREFIX "vcontext: " +#include + +#define CMD_HELP 0x1000 +#define CMD_VERSION 0x1001 +#define CMD_NID 0x4000 +#define CMD_CREATE 0x4001 +#define CMD_MIGRATE 0x4003 +#define CMD_SILENT 0x4007 +#define CMD_SILENTEXIST 0x400c + +struct option const +CMDLINE_OPTIONS[] = { + { "help", no_argument, 0, CMD_HELP }, + { "version", no_argument, 0, CMD_VERSION }, + { "nid", required_argument, 0, CMD_NID }, + { "create", no_argument, 0, CMD_CREATE }, + { "migrate", required_argument, 0, CMD_MIGRATE }, + { "silent", no_argument, 0, CMD_SILENT }, + { "silentexist", no_argument, 0, CMD_SILENTEXIST }, + { 0,0,0,0 } +}; + +struct Arguments { + bool do_create; + bool do_migrate; + bool is_silentexist; + int verbosity; + nid_t nid; +}; + +int wrapper_exit_code = 255; + +static void +showHelp(char const *cmd) +{ + WRITE_MSG(1, "Usage:\n "); + WRITE_STR(1, cmd); + WRITE_MSG(1, + " --create * [--] *\n "); + WRITE_STR(1, cmd); + WRITE_MSG(1, + " --migrate * [--] *\n"); + WRITE_STR(1, cmd); + WRITE_MSG(1, + " --add|--del /[|] * [--] *\n"); + WRITE_STR(1, cmd); + WRITE_MSG(1, + " (--flag *)|(--caps *) * [--] *\n" + "\n" + " can be:\n" + " --nid ... operate on network context ; in combination\n" + " with '--create' the network context instead of\n" + " a dynamic one will be created, and with '--migrate\n" + " the context instead of the current one will\n" + " be entered\n" + " --silent ... be silent\n" + " --silentexist ... be silent when context exists already; usefully\n" + " for '--create' only\n" + "\n" + "'vnet --create' exits with code 254 iff the context exists already.\n" + "\n" + "Please report bugs to " PACKAGE_BUGREPORT "\n"); + + exit(0); +} + + +static void +showVersion() +{ + WRITE_MSG(1, + "vnet " VERSION " -- manages the creation of network contexts\n" + "This program is part of " PACKAGE_STRING "\n\n" + "Copyright (C) 2004 Enrico Scholz\n" + VERSION_COPYRIGHT_DISCLAIMER); + exit(0); +} + +static inline ALWAYSINLINE int +doit(struct Arguments const *args, char *argv[]) +{ + nid_t nid; + + if (args->do_create) { + nid = vc_net_create_context(args->nid); + if (nid==VC_NONID) { + switch (errno) { + case EEXIST : + if (!args->is_silentexist) + perror(ENSC_WRAPPERS_PREFIX "vc_net_create_context()"); + return 254; + default : + perror(ENSC_WRAPPERS_PREFIX "vc_net_create_context()"); + return wrapper_exit_code; + } + } + tellContext(nid, args->verbosity>=1); + } + else + nid = args->nid; + + +} + + +int main (int argc, char *argv[]) +{ + struct Arguments args = { + .do_create = false, + .do_migrate = false, + .is_silentexist = false, + .verbosity = 1, + .nid = VC_DYNAMIC_NID, + }; + + while (1) { + int c = getopt_long(argc, argv, "+", CMDLINE_OPTIONS, 0); + if (c==-1) break; + + switch (c) { + case CMD_HELP : showHelp(1, argv[0], 0); + case CMD_VERSION : showVersion(); + case CMD_NID : args.nid = optarg(nid); break; + case CMD_CREATE : args.do_create = true; break; + case CMD_MIGRATE : args.do_migrate = true; break; + case CMD_SILENTEXIST : args.is_silentexist = true; break; + case CMD_SILENT : --args.verbosity; break; + + default : + WRITE_MSG(2, "Try '"); + WRITE_STR(2, argv[0]); + WRITE_MSG(2, " --help\" for more information.\n"); + return 255; + break; + } + } + + if (args.nid==VC_DYNAMIC_NID && args.do_migrate) + args.nid = Evc_get_task_nid(0); + + if (!args.do_create && !args.do_migrate) + WRITE_MSG(2, "Neither '--create' nor '--migrate specified; try '--help' for more information\n"); + else if (args.do_create && args.do_migrate) + WRITE_MSG(2, "Can not specify '--create' and '--migrate' at the same time; try '--help' for more information\n"); + else if (!args.do_create && args.nid==VC_DYNAMIC_NID) + WRITE_MSG(2, ENSC_WRAPPERS_PREFIX "Can not migrate to an unknown context\n"); + else if (optind>=argc) + WRITE_MSG(2, "No command given; use '--help' for more information.\n"); + else + return doit(&args, argv); + + return 255; +} -- 1.8.1.5