diff options
author | Benedikt Boehm <hollow@gentoo.org> | 2006-03-26 07:19:04 +0000 |
---|---|---|
committer | Benedikt Boehm <hollow@gentoo.org> | 2006-03-26 07:19:04 +0000 |
commit | 0139f54f5d5d939223ba39267aef6eeed9c0ebb1 (patch) | |
tree | 265c36196b720fdfb322a663c4041d37a2b94f19 | |
parent | Preparing -r1 for 2.0.2_rc14 and 2.1.1_rc14, still waiting for more patches (diff) | |
download | misc-0139f54f5d5d939223ba39267aef6eeed9c0ebb1.tar.gz misc-0139f54f5d5d939223ba39267aef6eeed9c0ebb1.tar.bz2 misc-0139f54f5d5d939223ba39267aef6eeed9c0ebb1.zip |
import chcontext fix; syscall update
svn path=/; revision=298
14 files changed, 976 insertions, 0 deletions
diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-fix-fastboot.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-fix-fastboot.patch new file mode 100644 index 0000000..7bf246d --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-fix-fastboot.patch @@ -0,0 +1,13 @@ +diff -Nrup util-vserver-0.30.208.orig/scripts/vserver.functions util-vserver-0.30.208/scripts/vserver.functions +--- util-vserver-0.30.208.orig/scripts/vserver.functions 2005-07-03 19:47:06.000000000 +0200 ++++ util-vserver-0.30.208/scripts/vserver.functions 2005-08-03 11:59:32.000000000 +0200 +@@ -627,8 +627,7 @@ function prepareInit + find var/lock ! -type d -print0; } | xargs -0r $_CHROOT_SH rm + ;; + plain) +- $_CHROOT_SH rm .autofsck forcefsck 2>/dev/null || : +- : | $_CHROOT_SH truncate fastboot 2>/dev/null || : ++ $_CHROOT_SH rm .autofsck forcefsck fastboot 2> /dev/null || : + ;; + minit) + ;; diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-nicefix.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-nicefix.patch new file mode 100644 index 0000000..8b489f0 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-nicefix.patch @@ -0,0 +1,24 @@ +diff -NurpP util-vserver-0.30.208/scripts/legacy/vserver util-vserver-0.30.208-nicefix/scripts/legacy/vserver +--- util-vserver-0.30.208/scripts/legacy/vserver 2005-03-21 21:03:31.000000000 +0100 ++++ util-vserver-0.30.208-nicefix/scripts/legacy/vserver 2005-10-27 13:33:37.384017250 +0200 +@@ -514,7 +514,7 @@ elif [ "$2" = "start" ] ; then + DOMAINOPT="--domainname $S_DOMAINNAME" + fi + if [ "$S_NICE" != "" ] ; then +- NICECMD="nice -$S_NICE" ++ NICECMD="nice -n $S_NICE" + fi + mkdir -p $__PKGSTATEDIR + chmod 700 $__PKGSTATEDIR +diff -NurpP util-vserver-0.30.208/scripts/vserver.functions util-vserver-0.30.208-nicefix/scripts/vserver.functions +--- util-vserver-0.30.208/scripts/vserver.functions 2005-07-03 19:47:06.000000000 +0200 ++++ util-vserver-0.30.208-nicefix/scripts/vserver.functions 2005-10-27 13:32:33.332014250 +0200 +@@ -100,7 +100,7 @@ function _generateNiceCommand + test -r "$vdir/nice" || return 0; + read nice <"$vdir"/nice + +- NICE_CMD=( $_NICE -$nice ) ++ NICE_CMD=( $_NICE -n $nice ) + } + + diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-rkill.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-rkill.patch new file mode 100644 index 0000000..058e404 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-rkill.patch @@ -0,0 +1,26 @@ +diff -NurpP util-vserver-0.30.208/lib/cflags-v13.c util-vserver-0.30.208-rkill/lib/cflags-v13.c +--- util-vserver-0.30.208/lib/cflags-v13.c 2004-10-21 21:00:20.000000000 +0200 ++++ util-vserver-0.30.208-rkill/lib/cflags-v13.c 2005-09-30 14:32:27.575320000 +0200 +@@ -54,6 +54,9 @@ static struct Mapping_uint64 const VALUE + DECL("state_setup", VC_VXF_STATE_SETUP), + DECL("state_init", VC_VXF_STATE_INIT), + ++ DECL("sc_helper", VC_VXF_SC_HELPER), ++ DECL("reboot_kill", VC_VXF_REBOOT_KILL), ++ + DECL("fork_rss", VC_VXF_FORK_RSS), + DECL("prolific", VC_VXF_PROLIFIC), + DECL("igneg_nice", VC_VXF_IGNEG_NICE), +diff -NurpP util-vserver-0.30.208/lib/vserver.h util-vserver-0.30.208-rkill/lib/vserver.h +--- util-vserver-0.30.208/lib/vserver.h 2005-07-15 18:27:02.000000000 +0200 ++++ util-vserver-0.30.208-rkill/lib/vserver.h 2005-09-30 14:33:08.485876750 +0200 +@@ -181,6 +181,9 @@ + #define VC_VXF_STATE_SETUP (1ULL<<32) + #define VC_VXF_STATE_INIT (1ULL<<33) + ++#define VC_VXF_SC_HELPER (1ULL<<36) ++#define VC_VXF_REBOOT_KILL (1ULL<<37) ++ + #define VC_VXF_FORK_RSS (1ULL<<48) + #define VC_VXF_PROLIFIC (1ULL<<49) + diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-sharedportage.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-sharedportage.patch new file mode 100644 index 0000000..051e7f5 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.208-sharedportage.patch @@ -0,0 +1,11 @@ +diff -NurpP util-vserver-0.30.208/distrib/misc/fstab util-vserver-0.30.208-sharedportage/distrib/misc/fstab +--- util-vserver-0.30.208/distrib/misc/fstab 2005-02-19 19:12:34.000000000 +0100 ++++ util-vserver-0.30.208-sharedportage/distrib/misc/fstab 2005-09-30 14:39:41.790456750 +0200 +@@ -1,3 +1,7 @@ + none /proc proc defaults 0 0 + none /tmp tmpfs size=16m,mode=1777 0 0 + none /dev/pts devpts gid=5,mode=620 0 0 ++ ++# shared portage tree ++#/usr/portage /usr/portage none bind,ro 0 0 ++#/usr/portage/distfiles /usr/portage/distfiles none bind,rw 0 0 diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.209-remove-traditional-syscall.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.209-remove-traditional-syscall.patch new file mode 100644 index 0000000..fdb676a --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.209-remove-traditional-syscall.patch @@ -0,0 +1,29 @@ +Index: util-vserver-0.30.209/config.h.in +=================================================================== +--- util-vserver-0.30.209.orig/config.h.in ++++ util-vserver-0.30.209/config.h.in +@@ -232,10 +232,4 @@ + /* Use 64bit interface for filesystem operations */ + #undef _FILE_OFFSET_BITS + +- +-#if defined(__pic__) && defined(__i386) && !defined(ENSC_SYSCALL_TRADITIONAL) && !defined(ENSC_USE_ALTERNATIVE_SYSCALL_MACROS) +-# define ENSC_SYSCALL_TRADITIONAL 1 +-#endif +- + #include "compat.h" +- +Index: util-vserver-0.30.209/m4/ensc_syscall.m4 +=================================================================== +--- util-vserver-0.30.209.orig/m4/ensc_syscall.m4 ++++ util-vserver-0.30.209/m4/ensc_syscall.m4 +@@ -101,9 +101,4 @@ int main() { + if test x"$with_syscall" = xtraditional; then + AC_DEFINE(ENSC_SYSCALL_TRADITIONAL, 1, [Define to 1 when the fast syscall(2) invocation does not work]) + fi +- +- AH_BOTTOM([ +-#if defined(__pic__) && defined(__i386) && !defined(ENSC_SYSCALL_TRADITIONAL) && !defined(ENSC_USE_ALTERNATIVE_SYSCALL_MACROS) +-# define ENSC_SYSCALL_TRADITIONAL 1 +-#endif]) + ]) diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-bmask.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-bmask.patch new file mode 100644 index 0000000..93270c1 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-bmask.patch @@ -0,0 +1,14 @@ +--- util-vserver-0.30.210.orig/lib/syscall_setccaps-v13.hc 2004-03-24 02:07:11.000000000 +0100 ++++ util-vserver-0.30.210/lib/syscall_setccaps-v13.hc 2006-03-03 17:19:15.000000000 +0100 +@@ -25,7 +25,10 @@ + { + struct vcmd_ctx_caps_v0 k_caps; + +- k_caps.bcaps = caps->bcaps & caps->bmask; ++ if (caps->bmask) ++ k_caps.bcaps = caps->bcaps & caps->bmask; ++ else ++ k_caps.bcaps = ~0; + k_caps.ccaps = caps->ccaps; + k_caps.cmask = caps->cmask; + diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-chcontext-secure.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-chcontext-secure.patch new file mode 100644 index 0000000..2b91fc2 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-chcontext-secure.patch @@ -0,0 +1,14 @@ +--- util-vserver-0.30.210.orig/scripts/chcontext 2005-04-08 21:14:47.000000000 +0200 ++++ util-vserver-0.30.210/scripts/chcontext 2006-03-25 05:17:00.000000000 +0100 +@@ -153,9 +153,9 @@ + chain_cmd=( "${chain_cmd[@]}" + -- + $_VATTRIBUTE --set ++ ${OPT_SECURE:+--secure} + ${OPT_CAPS:+--bcap "${OPT_CAPS[*]}"} +- ${OPT_FLAGS:+--flag "${OPT_FLAGS[*]}"} +- ${OPT_SECURE:+--secure} ) ++ ${OPT_FLAGS:+--flag "${OPT_FLAGS[*]}"} ) + + migrate_cmd=( $_VCONTEXT + ${OPT_SILENT:+--silent} diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-delete-cmd.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-delete-cmd.patch new file mode 100644 index 0000000..b6f446f --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-delete-cmd.patch @@ -0,0 +1,38 @@ +diff -NurpP util-vserver-0.30.210/scripts/vserver util-vserver-0.30.210-delete/scripts/vserver +--- util-vserver-0.30.210/scripts/vserver 2005-10-28 20:29:00.000000000 +0200 ++++ util-vserver-0.30.210-delete/scripts/vserver 2006-03-12 08:21:19.293748750 +0100 +@@ -43,6 +43,7 @@ Possible commands are: + restart ... restarts the specified vserver; this is the subsequent + execution of a synchronized 'stop' and a 'start' + condrestart ... restarts the vserver when it is running already ++ delete ... deletes the specified vserver + suexec <user> <shell-command> <args*> + ... executes a command as the specified user in the vserver + exec <shell-command> <args*> +@@ -96,6 +97,17 @@ the GNU General Public License. This pr + exit 0 + } + ++function delete() ++{ ++ if [[ -z "$OPTION_SILENT" ]]; then ++ read -p "Really remove '$vserver'? [y/N]" deleteok ++ [[ "$deleteok" != [Yy] ]] && exit 2 ++ fi ++ ++ isVserverRunning "$VSERVER_DIR" && "${SELF[@]}" $OPTION_SILENT --sync "$vserver" stop ++ rm -rf $(readlink -f "$VSERVER_DIR"/vdir) "$VSERVER_DIR" ++} ++ + function suexec() + { + . $__PKGLIBDIR/vserver.suexec +@@ -203,7 +215,7 @@ case "$2" in + shift 2 + . $__PKGLIBDIR/vserver.$cmd + ;; +- (suexec|restart) ++ (suexec|restart|delete) + shift 2 + $cmd "$@" + ;; diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-gentoo-tools.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-gentoo-tools.patch new file mode 100644 index 0000000..a415d0a --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-gentoo-tools.patch @@ -0,0 +1,74 @@ +Index: util-vserver-0.30.210/scripts/Makefile-files +=================================================================== +--- util-vserver-0.30.210.orig/scripts/Makefile-files ++++ util-vserver-0.30.210/scripts/Makefile-files +@@ -38,6 +38,7 @@ AM_INSTALLCHECK_STD_OPTIONS_EXEMPT += \ + + + scripts_pkglib_src_DTA = scripts/functions \ ++ scripts/gentoo-functions.sh \ + scripts/vserver-build.apt-rpm \ + scripts/vserver-build.skeleton \ + scripts/vserver-build.debootstrap \ +@@ -68,6 +69,7 @@ scripts_pkglib_src_SCRPTS = scripts/pkgm + scripts/vservers.grabinfo.sh \ + scripts/vshelper \ + scripts/vsysvwrapper \ ++ scripts/vschedcalc \ + scripts/vyum-worker + + scripts_legacy_src_SCRPTS = scripts/legacy/save_s_context \ +@@ -85,7 +87,12 @@ scripts_sbin_src_PRGS = scripts/chconte + scripts/vserver \ + scripts/vsomething \ + scripts/vtop \ +- scripts/vyum ++ scripts/vyum \ ++ scripts/vdispatch-conf \ ++ scripts/vemerge \ ++ scripts/vesync \ ++ scripts/vserver-new \ ++ scripts/vupdateworld + + scripts_sbin_gen_PRGS = + scripts_sbincfg_gen_DTA = +Index: util-vserver-0.30.210/scripts/util-vserver-vars.pathsubst +=================================================================== +--- util-vserver-0.30.210.orig/scripts/util-vserver-vars.pathsubst ++++ util-vserver-0.30.210/scripts/util-vserver-vars.pathsubst +@@ -43,6 +43,7 @@ _IFSPEC="$__LEGACYDIR/ifspec" + _INITSYNC_MINIT_START=: + _KEEP_CTX_ALIVE="$__PKGLIBDIR/keep-ctx-alive" + _LIB_FUNCTIONS="$__PKGLIBDIR/functions" ++_LIB_GENTOO_FUNCTIONS="$__PKGLIBDIR/gentoo-functions.sh" + _LIB_VSERVER_SETUP_FUNCTIONS="$__PKGLIBDIR/vserver-setup.functions" + _LIB_VSERVER_BUILD_FUNCTIONS="$__PKGLIBDIR/vserver-build.functions" + _LIB_VSERVER_BUILD_FUNCTIONS_APT="$__PKGLIBDIR/vserver-build.functions.apt" +@@ -68,6 +69,9 @@ _VAPT_GET_WORKER="$__PKGLIBDIR/vapt-get- + _VATTRIBUTE="$__SBINDIR/vattribute" + _VCONTEXT="$__SBINDIR/vcontext" + _VDLIMIT="$__SBINDIR/vdlimit" ++_VDISPATCH_CONF="$__SBINDIR/vdispatch-conf" ++_VEMERGE="$__SBINDIR/vemerge" ++_VESYNC="$__SBINDIR/vesync" + _VDU="$__SBINDIR/vdu" + _VHASHIFY="$__PKGLIBDIR/vhashify" + _VKILL="$__SBINDIR/vkill" +@@ -81,7 +85,9 @@ _VRPM="$__SBINDIR/vrpm" + _VRPM_PRELOAD="$__PKGLIBDIR/vrpm-preload" + _VRPM_WORKER="$__PKGLIBDIR/vrpm-worker" + _VSCHED="$__SBINDIR/vsched" ++_VSCHEDCALC="$__PKGLIBDIR/vschedcalc" + _VSERVER="$__SBINDIR/vserver" ++_VSERVER_NEW="$__SBINDIR/vserver-new" + _VSERVER_LEGACY="$__LEGACYDIR/vserver" + _VSERVER_BUILD="$__PKGLIBDIR/vserver-build" + _VSERVER_INFO="$__SBINDIR/vserver-info" +@@ -92,6 +98,7 @@ _VSOMETHING="$__SBINDIR/vsomething" + _VWAIT="$__SBINDIR/vwait" + _VUNAME="$__SBINDIR/vuname" + _VUNIFY="$__PKGLIBDIR/vunify" ++_VUPDATEWORLD="$__SBINDIR/vupdateworld" + _VYUM="$__SBINDIR/vyum" + _VYUM_WORKER="$__PKGLIBDIR/vyum-worker" + diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-remove-init-style-gentoo.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-remove-init-style-gentoo.patch new file mode 100644 index 0000000..7fabe46 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-remove-init-style-gentoo.patch @@ -0,0 +1,15 @@ +Index: util-vserver-0.30.210/scripts/vserver.functions +=================================================================== +--- util-vserver-0.30.210.orig/scripts/vserver.functions ++++ util-vserver-0.30.210/scripts/vserver.functions +@@ -292,9 +292,7 @@ function _generateInitOptions + ;; + + (xgentoo) +- INITCMD_START=( /sbin/rc default ) +- INITCMD_STOP=( /sbin/rc shutdown ) +- ;; ++ panic "init-style '$INITSTYLE' is no longer supported; please use plain instead; aborting";; + + (x) ;; + (*) panic "Unknown init-style '$INITSTYLE'; aborting";; diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-syscall-update.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-syscall-update.patch new file mode 100644 index 0000000..ab75ca7 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-syscall-update.patch @@ -0,0 +1,209 @@ +diff -NurpP util-vserver-0.30.210/lib/syscall-alternative.h util-vserver-0.30.210-shiny9/lib/syscall-alternative.h +--- util-vserver-0.30.210/lib/syscall-alternative.h 2005-10-28 18:33:50.000000000 +0200 ++++ util-vserver-0.30.210-shiny9/lib/syscall-alternative.h 2006-03-26 04:33:07.000000000 +0200 +@@ -1,9 +1,7 @@ +- // from http://vserver.13thfloor.at/Experimental/SYSCALL/syscall_shiny7.h +- + #ifndef __SYSCALL_NEW_H + #define __SYSCALL_NEW_H + +-/* Copyright (C) 2005 Herbert Pötzl ++/* Copyright (C) 2005-2006 Herbert Pötzl + + global config options + +@@ -39,12 +37,13 @@ + __sysc_rcon(n) ... syscall register constraint + __sysc_regs ... list of input regs for clobber + __sysc_type ... register type ++ __sysc_aout ... asm code output constraint + + if all else fails + + __sc_asmload(n,N,...) ... asm code to prepare arguments + __sc_asmsysc(n,N) ... asm code to execute syscall +- __sc_asmsave(n,r,e) ... asm code to store results ++ __sc_asmsave(n) ... asm code to store results + + */ + +@@ -243,7 +242,8 @@ + sret: r0(r28) + serr: (sret >= (unsigned)-EMAXERRNO) + call: ble 0x100(%%sr2, %%r0) +- clob: r1, r2, r4, r20, r29, r31, memory ++ clob: r1, r2, (r4), r20, r29, r31, memory ++ picr: pr(r19) + */ + + #define __sysc_max_err 4095 +@@ -253,13 +253,21 @@ + ("r26", "r25", "r24", "r23", "r22", "r21") + + #define __sysc_cmd_sys "ble 0x100(%%sr2,%%r0)" +-#define __sysc_cmd_fin "ldi %0,%%r20" + +-#define __sysc_clobber __sysc_regs, \ +- "r1", "r2", "r4", "r20", "r29", "r31", "memory" ++#define __sysc_pre(n) \ ++ __pasm(n,1,1, "copy %%r19, %%r4" , ) + +-#warning syscall arch hppa not tested yet ++#define __sysc_fin(n) \ ++ __casm(n,1,1, "ldi %0,%%r20" , )\ ++ __pasm(n,1,1, "copy %%r4, %%r19" , ) + ++#ifndef __PIC__ ++#define __sysc_clobber __sysc_regs, \ ++ "r1", "r2", "r20", "r29", "r31", "memory" ++#else ++#define __sysc_clobber __sysc_regs, \ ++ "r1", "r2", "r4", "r20", "r29", "r31", "memory" ++#endif + + + /* ***************************************** +@@ -277,6 +285,7 @@ + sret: r0(eax) + serr: (sret >= (unsigned)-EMAXERRNO) + call: int 0x80 ++ picr: pr(ebx) + clob: memory + */ + +@@ -301,15 +310,19 @@ + __casm(n,6,1, "pushl %%ebp" , )\ + ""::__sc_iregs(n,__VA_ARGS__):__sysc_clobber) + ++#define __sc_asmsave(n) ++ + #define __sysc_pre(n) \ + __casm(n,6,1, "movl %%eax,%%ebp" , )\ +- __casm(n,0,1, "movl %0,%%eax" , )\ ++ __casm(n,0,1, "movl %1,%%eax" , )\ + + #define __sysc_fin(n) \ + __casm(n,6,1, "popl %%ebp" , )\ + __pasm(n,1,1, "popl %%ebx" , )\ + +-#define __sysc_clobber __sysc_regs, "eax", "memory" ++#define __sysc_save ++#define __sysc_aout "=a"(__res) ++#define __sysc_clobber __sysc_regs, "memory" + + + /* ***************************************** +@@ -399,8 +412,43 @@ + + #elif defined(__mips__) + +-#error syscall arch mips not implemented yet ++/* The ABIO32 calling convention uses a0-a3 to pass the first ++ four arguments, the rest is passed on the userspace stack. The 5th arg ++ starts at 16($sp). ++ ++ ABIN32 and ABI64 pass 6 args in a0-a3, t0-t1. ++ ++ scnr: id(v0) ++ args: a1(a0), a2(a1), a3(a2), a4(a3), a5(16($sp)), a6(20($sp)) ++ sret: r0(v0) ++ serr: e0(a3) ++ call: syscall ++ clob: at, v0, t0-t7, t8-t9 ++*/ ++ ++#define __sysc_reg_cid "v0" ++#define __sysc_reg_ret "v0" ++#define __sysc_reg_err "a3" ++#define __sysc_cmd_sys "syscall" + ++#define __sysc_reg(n) __arg_##n\ ++ ("a0","a1","a2","a3", "t0", "t1") ++ ++#define __sysc_clobber "$1", "$3", "$8", "$9", "$10", "$11", "$12", \ ++ "$13", "$14", "$15", "$24", "$25", "memory" ++ ++#if _MIPS_SIM == _ABIO32 ++#define __sysc_pre(n) \ ++ __casm(n,5,1,"addiu $sp,$sp,-32",) \ ++ __casm(n,6,1,"sw $9,20($sp)",) \ ++ __casm(n,5,1,"sw $8, 16($sp)",) ++#define __sysc_fin(n) \ ++ __casm(n,5,1,"addiu $sp,$sp,32",) ++#elif (_MIPS_SIM == _ABIN32) || (_MIPS_SIM == _ABI64) ++#warning syscall arch mips with ABI N32 and 64 not tested yet ++#else ++#error unknown mips ABI version ++#endif + + + /* ***************************************** +@@ -864,6 +912,9 @@ + #define __sysc_rcon(n) "g" + #endif + ++#ifndef __sysc_aout ++#define __sysc_aout ++#endif + + + #ifdef __sc_complex /* complex result */ +@@ -918,6 +969,7 @@ + return (type)(res) + #endif + ++ + #define __sc_results \ + __sc_res_def(__res, __sysc_reg_res) + +@@ -1009,7 +1061,7 @@ + #ifndef __sc_asmsysc + #define __sc_asmsysc(n,N) __sc_asm_vol( \ + __casm(n,0,0, __sc_cmds(n,N) , )\ +- ::"i"(__sc_id(N)) : __sysc_clobber) ++ :__sysc_aout:"i"(__sc_id(N)) : __sysc_clobber) + #endif + + #ifndef __sc_asmsave +@@ -1031,33 +1083,33 @@ + + + +-#define _syscall0(type, name) \ ++#define _syscall0(type, name) \ + type name(void) \ + __sc_body(0, type, name, *) + +-#define _syscall1(type, name, type1, arg1) \ ++#define _syscall1(type, name, type1, arg1) \ + type name(type1 arg1) \ + __sc_body(1, type, name, arg1) + +-#define _syscall2(type, name, type1, arg1, type2, arg2) \ ++#define _syscall2(type, name, type1, arg1, type2, arg2) \ + type name(type1 arg1, type2 arg2) \ + __sc_body(2, type, name, arg1, arg2) + +-#define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \ ++#define _syscall3(type, name, type1, arg1, type2, arg2, type3, arg3) \ + type name(type1 arg1, type2 arg2, type3 arg3) \ + __sc_body(3, type, name, arg1, arg2, arg3) + +-#define _syscall4(type, name, type1, arg1, type2, arg2, type3, arg3, \ ++#define _syscall4(type, name, type1, arg1, type2, arg2, type3, arg3, \ + type4, arg4) \ + type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ + __sc_body(4, type, name, arg1, arg2, arg3, arg4) + +-#define _syscall5(type, name, type1, arg1, type2, arg2, type3, arg3, \ +- type4, arg4, type5, arg5) \ ++#define _syscall5(type, name, type1, arg1, type2, arg2, type3, arg3, \ ++ type4, arg4, type5, arg5) \ + type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ + __sc_body(5, type, name, arg1, arg2, arg3, arg4, arg5) + +-#define _syscall6(type, name, type1, arg1, type2, arg2, type3, arg3, \ ++#define _syscall6(type, name, type1, arg1, type2, arg2, type3, arg3, \ + type4, arg4, type5, arg5, type6, arg6) \ + type name(type1 arg1, type2 arg2, type3 arg3, \ + type4 arg4, type5 arg5, type6 arg6) \ diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-testsuite-fix.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-testsuite-fix.patch new file mode 100644 index 0000000..b9cfd46 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-testsuite-fix.patch @@ -0,0 +1,52 @@ +diff -NurpP util-vserver-0.30.210/lib/testsuite/personality.c util-vserver-0.30.210-testfix/lib/testsuite/personality.c +--- util-vserver-0.30.210/lib/testsuite/personality.c 2005-12-31 11:31:55.000000000 +0100 ++++ util-vserver-0.30.210-testfix/lib/testsuite/personality.c 2006-03-16 17:41:30.239559250 +0100 +@@ -73,7 +73,6 @@ int main() + TEST_T2PF("SHORT_INODE", 0, SHORT_INODE); + TEST_T2PF("WHOLE_SECONDS", 0, WHOLE_SECONDS); + TEST_T2PF("STICKY_TIMEOUTS", 0, STICKY_TIMEOUTS); +- TEST_T2PF("ADDR_LIMIT_3GB", 0, ADDR_LIMIT_3GB); + + + // the _loc* tests +@@ -82,7 +81,6 @@ int main() + TEST_PF2T("SHORT_INODE", SHORT_INODE); + TEST_PF2T("WHOLE_SECONDS", WHOLE_SECONDS); + TEST_PF2T("STICKY_TIMEOUTS", STICKY_TIMEOUTS); +- TEST_PF2T("ADDR_LIMIT_3GB", ADDR_LIMIT_3GB); + + + +@@ -123,10 +121,10 @@ int main() + TEST_LIST("mmap_page_zero,any", 0, -1, MMAP_PAGE_ZERO, 15, 3); + + TEST_LIST("mmap_page_zero,addr_limit_32bit,short_inode,whole_seconds," +- "sticky_timeouts,addr_limit_3gb", ++ "sticky_timeouts", + 0, 0, + MMAP_PAGE_ZERO|ADDR_LIMIT_32BIT|SHORT_INODE|WHOLE_SECONDS| +- STICKY_TIMEOUTS|ADDR_LIMIT_3GB, ++ STICKY_TIMEOUTS, + -1, 0); + + TEST_T2PT("linux", 0, PER_LINUX); +diff -NurpP util-vserver-0.30.210/src/testsuite/vunify-test.sh util-vserver-0.30.210-testfix/src/testsuite/vunify-test.sh +--- util-vserver-0.30.210/src/testsuite/vunify-test.sh 2005-03-21 21:03:33.000000000 +0100 ++++ util-vserver-0.30.210-testfix/src/testsuite/vunify-test.sh 2006-03-16 17:37:04.014921250 +0100 +@@ -1,6 +1,7 @@ + #! /bin/bash + +-: ${srcdir=.} ++: ${srcdir:=.} ++: ${builddir:=.} + : ${tmptopdir=/var/tmp} + + set -e +@@ -49,5 +50,5 @@ pushd $tmpdir &>/dev/null + popd &>/dev/null + + +-$D ./src/vunify -n --manually $tmpdir/a '' $tmpdir/b '' >/dev/null +-$D ./src/vunify -n --manually $tmpdir/a '' $tmpdir/c '' >/dev/null ++$builddir/src/vunify -n --manually $tmpdir/a '' $tmpdir/b '' >/dev/null ++$builddir/src/vunify -n --manually $tmpdir/a '' $tmpdir/c '' >/dev/null diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-vlogin.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-vlogin.patch new file mode 100644 index 0000000..b3b5acf --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-vlogin.patch @@ -0,0 +1,448 @@ +diff -Nurp util-vserver-0.30.210.orig/ensc_wrappers/wrappers.h util-vserver-0.30.210/ensc_wrappers/wrappers.h +--- util-vserver-0.30.210.orig/ensc_wrappers/wrappers.h 2006-03-15 12:39:49.000000000 +0100 ++++ util-vserver-0.30.210/ensc_wrappers/wrappers.h 2006-03-13 22:32:33.000000000 +0100 +@@ -111,6 +111,10 @@ + # include "wrappers-stat.hc" + #endif + ++#ifdef ENSC_WRAPPERS_TERMIOS ++# include "wrappers-termios.hc" ++#endif ++ + #undef ENSC_DETAIL2 + #undef ENSC_DETAIL1 + #undef ENSC_DOQUOTE_COND +diff -Nurp util-vserver-0.30.210.orig/ensc_wrappers/wrappers-termios.hc util-vserver-0.30.210/ensc_wrappers/wrappers-termios.hc +--- util-vserver-0.30.210.orig/ensc_wrappers/wrappers-termios.hc 1970-01-01 01:00:00.000000000 +0100 ++++ util-vserver-0.30.210/ensc_wrappers/wrappers-termios.hc 2006-03-13 22:32:33.000000000 +0100 +@@ -0,0 +1,32 @@ ++// $Id: util-vserver-0.30.210-vlogin.patch,v 1.1 2006/03/12 00:01:57 dhozac Exp $ --*- c -*-- ++ ++// Copyright (C) 2006 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> ++// ++// 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. ++ ++#ifndef H_ENSC_IN_WRAPPERS_H ++# error wrappers-termios.hc can not be used in this way ++#endif ++ ++inline static WRAPPER_DECL void ++Etcgetattr(int fd, struct termios *termios_p) ++{ ++ FatalErrnoError(tcgetattr(fd, termios_p)==-1, "tcgetattr()"); ++} ++ ++inline static WRAPPER_DECL void ++Etcsetattr(int fd, int optional_actions, struct termios *termios_p) ++{ ++ FatalErrnoError(tcsetattr(fd, optional_actions, termios_p)==-1, "tcsetattr()"); ++} +diff -Nurp util-vserver-0.30.210.orig/scripts/vserver.functions util-vserver-0.30.210/scripts/vserver.functions +--- util-vserver-0.30.210.orig/scripts/vserver.functions 2006-03-15 12:39:49.000000000 +0100 ++++ util-vserver-0.30.210/scripts/vserver.functions 2006-03-13 22:32:33.000000000 +0100 +@@ -39,7 +39,7 @@ declare -a ENTER_SHELL=() + + declare -a OPTS_VCONTEXT_CREATE=() + declare -a OPTS_VCONTEXT_MIGRATE=() +-declare -a OPTS_VCONTEXT_ENTER=() ++declare -a OPTS_VCONTEXT_ENTER=( --vlogin ) + declare -a OPTS_VATTRIBUTE=( --flag fakeinit ) + declare -a OPTS_VSCHED=() + +diff -Nurp util-vserver-0.30.210.orig/src/Makefile-files util-vserver-0.30.210/src/Makefile-files +--- util-vserver-0.30.210.orig/src/Makefile-files 2006-03-15 12:39:49.000000000 +0100 ++++ util-vserver-0.30.210/src/Makefile-files 2006-03-13 22:32:33.000000000 +0100 +@@ -167,7 +167,7 @@ src_chcontext_compat_SOURCES = src/chcon + src_chcontext_compat_LDADD = $(VSERVER_LDADDS) $(LIBINTERNAL) + src_chcontext_compat_LDFLAGS = $(VSERVER_LDFLGS) + +-src_vcontext_SOURCES = src/vcontext.c ++src_vcontext_SOURCES = src/vcontext.c src/vlogin.c + src_vcontext_LDADD = $(VSERVER_LDADDS) $(LIBINTERNAL) + src_vcontext_LDFLAGS = $(VSERVER_LDFLGS) + +diff -Nurp util-vserver-0.30.210.orig/src/vcontext.c util-vserver-0.30.210/src/vcontext.c +--- util-vserver-0.30.210.orig/src/vcontext.c 2006-03-15 12:39:49.000000000 +0100 ++++ util-vserver-0.30.210/src/vcontext.c 2006-03-13 22:32:33.000000000 +0100 +@@ -65,6 +65,7 @@ + #define CMD_NAMESPACE 0x400d + #define CMD_PERSTYPE 0x400e + #define CMD_PERSFLAG 0x400f ++#define CMD_VLOGIN 0x4010 + + + struct option const +@@ -88,6 +89,7 @@ CMDLINE_OPTIONS[] = { + { "syncmsg", required_argument, 0, CMD_SYNCMSG }, + { "personality-type", required_argument, 0, CMD_PERSTYPE }, + { "personality-flags", required_argument, 0, CMD_PERSFLAG }, ++ { "vlogin", no_argument, 0, CMD_VLOGIN }, + #if 1 + { "fakeinit", no_argument, 0, CMD_INITPID }, // compatibility + #endif +@@ -103,6 +105,7 @@ struct Arguments { + bool is_initpid; + bool is_silentexist; + bool set_namespace; ++ bool do_vlogin; + uint_least32_t personality_flags; + uint_least32_t personality_type; + int verbosity; +@@ -115,6 +118,8 @@ struct Arguments { + + int wrapper_exit_code = 255; + ++void do_vlogin(char *argv[]); ++ + static void + showHelp(int fd, char const *cmd, int res) + { +@@ -148,6 +153,7 @@ showHelp(int fd, char const *cmd, int re + " --syncmsg <message>\n" + " ... use <message> as synchronization message; by\n" + " default, 'ok' will be used\n" ++ " --vlogin ... enable terminal proxy\n" + "\n" + "'vcontext --create' exits with code 254 iff the context exists already.\n" + "\n" +@@ -314,12 +320,15 @@ doit(struct Arguments const *args, char + sys_personality(args->personality_type | args->personality_flags)==-1) { + perror(ENSC_WRAPPERS_PREFIX "personality()"); + exit(wrapper_exit_code); +- } ++ } + + doExternalSync(ext_sync_fd, args->sync_msg); + doSyncStage1(p, args->do_disconnect); + DPRINTF("doit: pid=%u, ppid=%u\n", getpid(), getppid()); +- execvp (argv[optind],argv+optind); ++ if (!args->do_vlogin) ++ execvp (argv[optind],argv+optind); ++ else ++ do_vlogin(argv+optind); + doSyncStage2(p, args->do_disconnect); + + PERROR_Q(ENSC_WRAPPERS_PREFIX "execvp", argv[optind]); +@@ -368,6 +377,7 @@ int main (int argc, char *argv[]) + .do_migrateself = false, + .do_disconnect = false, + .do_endsetup = false, ++ .do_vlogin = false, + .is_initpid = false, + .is_silentexist = false, + .set_namespace = false, +@@ -390,6 +400,7 @@ int main (int argc, char *argv[]) + case CMD_MIGRATE : args.do_migrate = true; break; + case CMD_DISCONNECT : args.do_disconnect = true; break; + case CMD_ENDSETUP : args.do_endsetup = true; break; ++ case CMD_VLOGIN : args.do_vlogin = true; break; + case CMD_INITPID : args.is_initpid = true; break; + case CMD_CHROOT : args.do_chroot = true; break; + case CMD_NAMESPACE : args.set_namespace = true; break; +diff -Nurp util-vserver-0.30.210.orig/src/vlogin.c util-vserver-0.30.210/src/vlogin.c +--- util-vserver-0.30.210.orig/src/vlogin.c 1970-01-01 01:00:00.000000000 +0100 ++++ util-vserver-0.30.210/src/vlogin.c 2006-03-15 13:04:34.000000000 +0100 +@@ -0,0 +1,292 @@ ++// $Id: util-vserver-0.30.210-vlogin.patch,v 1.1 2006/03/12 00:01:57 dhozac Exp $ ++ ++// Copyright (C) 2006 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de> ++// ++// 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 <config.h> ++#endif ++ ++#include "util.h" ++#include <lib/vserver.h> ++#include <lib/fmt.h> ++ ++#include <stdlib.h> ++#include <getopt.h> ++#include <stdint.h> ++#include <errno.h> ++#include <sys/stat.h> ++#include <sys/ioctl.h> ++#include <sys/wait.h> ++#include <sys/socket.h> ++#include <termios.h> ++#include <signal.h> ++#include <pty.h> ++ ++#define ENSC_WRAPPERS_PREFIX "vlogin: " ++#define ENSC_WRAPPERS_IOCTL 1 ++#define ENSC_WRAPPERS_UNISTD 1 ++#define ENSC_WRAPPERS_SOCKET 1 ++#define ENSC_WRAPPERS_IO 1 ++#define ENSC_WRAPPERS_TERMIOS 1 ++#include <wrappers.h> ++ ++struct terminal { ++ int fd; /* terminal file descriptor */ ++ struct termios term; /* terminal settings */ ++ struct winsize ws; /* terminal size */ ++ pid_t pid; /* terminal process id */ ++ struct termios termo; /* original terminal settings */ ++ enum { TS_RESET, TS_RAW } state; /* terminal state */ ++}; ++ ++static struct terminal t; ++extern int wrapper_exit_code; ++ ++/* set terminal to raw mode */ ++static void ++terminal_raw(void) ++{ ++ struct termios buf; ++ ++ /* save original terminal settings */ ++ Etcgetattr(STDIN_FILENO, &t.termo); ++ ++ buf = t.termo; ++ ++ /* echo off ++ ** canonical mode off ++ ** extended input processing off ++ ** signal chars off */ ++ buf.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG); ++ ++ /* no SIGINT on BREAK ++ ** CR-to-NL off ++ ** input parity check off ++ ** don't strip 8th bit on input ++ ** output flow control off */ ++ buf.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON); ++ ++ /* clear size bits ++ ** parity checking off */ ++ buf.c_cflag &= ~(CSIZE | PARENB); ++ ++ /* set 8 bits/char */ ++ buf.c_cflag |= CS8; ++ ++ /* output processing off */ ++ buf.c_oflag &= ~(OPOST); ++ ++ /* 1 byte at a time ++ ** no timer */ ++ buf.c_cc[VMIN] = 1; ++ buf.c_cc[VTIME] = 0; ++ ++ Etcsetattr(STDIN_FILENO, TCSAFLUSH, &buf); ++ ++ t.state = TS_RAW; ++} ++ ++/* reset terminal to original state */ ++static void ++terminal_reset(void) ++{ ++ if (t.state != TS_RAW) ++ return; ++ ++ Etcsetattr(STDIN_FILENO, TCSAFLUSH, &t.termo); ++ ++ t.state = TS_RESET; ++} ++ ++/* exit handler */ ++static void ++terminal_atexit(void) ++{ ++ terminal_reset(); ++ WRITE_MSG(1, "\n"); /* for cosmetic reasons */ ++} ++ ++/* send signal to terminal */ ++static void ++terminal_kill(int sig) ++{ ++ pid_t pgrp = -1; ++ ++ /* try to get process group leader */ ++ if (ioctl(t.fd, TIOCGPGRP, &pgrp) >= 0 && ++ pgrp != -1 && ++ kill(-pgrp, sig) != -1) ++ return; ++ ++ /* fallback using terminal pid */ ++ kill(-t.pid, sig); ++} ++ ++/* redraw the terminal screen */ ++static void ++terminal_redraw(void) ++{ ++ /* get winsize from stdin */ ++ if (ioctl(STDIN_FILENO, TIOCGWINSZ, &t.ws) == -1) ++ return; ++ ++ /* set winsize in terminal */ ++ ioctl(t.fd, TIOCSWINSZ, &t.ws); ++ ++ /* set winsize change signal to terminal */ ++ terminal_kill(SIGWINCH); ++} ++ ++/* copy terminal activity to user */ ++static void ++terminal_activity(void) ++{ ++ char buf[64]; ++ size_t len; ++ ++ /* read terminal activity */ ++ len = Eread(t.fd, buf, sizeof(buf)); ++ ++ /* get the current terminal settings */ ++ Etcgetattr(t.fd, &t.term); ++ ++ /* set the current terminal settings */ ++ Etcsetattr(STDIN_FILENO, TCSANOW, &t.term); ++ ++ /* write activity to user */ ++ EwriteAll(STDOUT_FILENO, buf, len); ++} ++ ++/* copy user activity to terminal */ ++static void ++user_activity(void) ++{ ++ char buf[64]; ++ size_t len; ++ ++ len = Eread(STDIN_FILENO, buf, sizeof(buf)); ++ EwriteAll(t.fd, buf, len); ++} ++ ++/* catch signals */ ++static void ++signal_handler(int sig) ++{ ++ int status; ++ ++ switch(sig) { ++ /* catch interrupt */ ++ case SIGINT: ++ terminal_kill(sig); ++ break; ++ ++ /* terminal died */ ++ case SIGCHLD: ++ wait(&status); ++ exit(status); ++ break; ++ ++ /* window size has changed */ ++ case SIGWINCH: ++ terminal_redraw(); ++ break; ++ ++ default: ++ exit(0); ++ } ++ ++} ++ ++void do_vlogin(char *argv[]) ++{ ++ int slave; ++ pid_t pid; ++ int n; ++ fd_set rfds; ++ ++ if (!isatty(0) || !isatty(1)) { ++ execvp(argv[0], argv); ++ return; ++ } ++ ++ /* set terminal to raw mode */ ++ terminal_raw(); ++ ++ /* fork new pseudo terminal */ ++ if (openpty(&t.fd, &slave, NULL, NULL, NULL) == -1) { ++ perror(ENSC_WRAPPERS_PREFIX "openpty()"); ++ exit(EXIT_FAILURE); ++ } ++ ++ pid = Efork(); ++ ++ /* setup some signal handlers */ ++ signal(SIGINT, signal_handler); ++ signal(SIGCHLD, signal_handler); ++ signal(SIGWINCH, signal_handler); ++ ++ if (pid == 0) { ++ /* we don't need the master side of the terminal */ ++ close(t.fd); ++ ++ /* login_tty() stupid dietlibc doesn't have it */ ++ Esetsid(); ++ ++ Eioctl(slave, TIOCSCTTY, NULL); ++ ++ Edup2(slave, 0); ++ Edup2(slave, 1); ++ Edup2(slave, 2); ++ ++ if (slave > 2) ++ close(slave); ++ ++ Eexecvp(argv[0], argv); ++ } ++ ++ /* save terminals pid */ ++ t.pid = pid; ++ ++ /* we want a redraw */ ++ atexit(terminal_atexit); ++ terminal_redraw(); ++ ++ /* main loop */ ++ for (;;) { ++ /* init file descriptors for select */ ++ FD_ZERO(&rfds); ++ FD_SET(STDIN_FILENO, &rfds); ++ FD_SET(t.fd, &rfds); ++ n = t.fd; ++ ++ /* wait for something to happen */ ++ while (select(n + 1, &rfds, NULL, NULL, NULL) == -1) { ++ if (errno == EINTR || errno == EAGAIN) ++ continue; ++ perror(ENSC_WRAPPERS_PREFIX "select()"); ++ exit(wrapper_exit_code); ++ } ++ ++ if (FD_ISSET(STDIN_FILENO, &rfds)) ++ user_activity(); ++ ++ if (FD_ISSET(t.fd, &rfds)) ++ terminal_activity(); ++ } ++ ++ /* never get here, signal handler exits */ ++} diff --git a/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-vprocunhide-fix.patch b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-vprocunhide-fix.patch new file mode 100644 index 0000000..5e0bf95 --- /dev/null +++ b/util-vserver/patches/0.30.210-r7/util-vserver-0.30.210-vprocunhide-fix.patch @@ -0,0 +1,9 @@ +Index: util-vserver-0.30.210/distrib/misc/vprocunhide-files +=================================================================== +--- util-vserver-0.30.210.orig/distrib/misc/vprocunhide-files ++++ util-vserver-0.30.210/distrib/misc/vprocunhide-files +@@ -28,3 +28,4 @@ + /proc/uptime + -/proc/cmdline + /proc/version ++/proc/mounts |