Changeset 115
- Timestamp:
- 02/26/06 22:51:16 (3 years ago)
- Files:
-
- branches/1.0.4/configure.ac (modified) (1 diff)
- branches/1.0.4/etc/Makefile.am (modified) (2 diffs)
- branches/1.0.4/etc/examples/context.conf (added)
- branches/1.0.4/scripts/Makefile.am (modified) (2 diffs)
- branches/1.0.4/scripts/commands/enter.sh (added)
- branches/1.0.4/scripts/commands/info.sh (modified) (1 diff)
- branches/1.0.4/scripts/commands/procfs.sh (modified) (3 diffs)
- branches/1.0.4/scripts/commands/stop.sh (modified) (1 diff)
- branches/1.0.4/scripts/defaults (added)
- branches/1.0.4/scripts/defaults/fstab (added)
- branches/1.0.4/scripts/defaults/mtab (added)
- branches/1.0.4/scripts/defaults/procfs.conf (added)
- branches/1.0.4/scripts/lib/fs.sh (added)
- branches/1.0.4/scripts/lib/util.sh (modified) (2 diffs)
- branches/1.0.4/scripts/lib/vps.sh (modified) (15 diffs)
- branches/1.0.4/scripts/pathconfig.in (modified) (1 diff)
- branches/1.0.4/src/tools/lockfile.c (modified) (2 diffs)
- branches/1.0.4/src/tools/nidof.c (modified) (1 diff)
- branches/1.0.4/src/tools/vattr.c (modified) (10 diffs)
- branches/1.0.4/src/tools/vconfig.c (modified) (1 diff)
- branches/1.0.4/src/tools/vdlimit.c (modified) (1 diff)
- branches/1.0.4/src/tools/vexec.c (modified) (3 diffs)
- branches/1.0.4/src/tools/vflags.c (modified) (1 diff)
- branches/1.0.4/src/tools/vinfo.c (modified) (2 diffs)
- branches/1.0.4/src/tools/vkill.c (modified) (1 diff)
- branches/1.0.4/src/tools/vlimit.c (modified) (1 diff)
- branches/1.0.4/src/tools/vlogin.c (modified) (3 diffs)
- branches/1.0.4/src/tools/vmount.c (modified) (7 diffs)
- branches/1.0.4/src/tools/vnamespace.c (modified) (1 diff)
- branches/1.0.4/src/tools/vncontext.c (modified) (9 diffs)
- branches/1.0.4/src/tools/vnflags.c (modified) (3 diffs)
- branches/1.0.4/src/tools/vps.c (modified) (4 diffs)
- branches/1.0.4/src/tools/vrsetup.c (modified) (1 diff)
- branches/1.0.4/src/tools/vsched.c (modified) (1 diff)
- branches/1.0.4/src/tools/vuname.c (modified) (2 diffs)
- branches/1.0.4/src/tools/vwait.c (modified) (1 diff)
- branches/1.0.4/src/tools/xidof.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/1.0.4/configure.ac
r82 r115 19 19 # Generic configuration 20 20 AC_PREREQ(2.59) 21 AC_INIT(vserver-utils, 1.0.3 , hollow@gentoo.org)21 AC_INIT(vserver-utils, 1.0.3.99, hollow@gentoo.org) 22 22 AC_CONFIG_HEADER([config.h]) 23 23 AC_GNU_SOURCE branches/1.0.4/etc/Makefile.am
r75 r115 19 19 include $(top_srcdir)/m4/pathconfig.am 20 20 21 nobase_pkgdata_DATA = examples/vservers.rc 21 nobase_pkgdata_DATA = examples/context.conf \ 22 examples/vservers.rc 23 24 EXTRA_DIST = $(nobase_pkgdata_DATA) 25 22 26 23 27 pkgconf_DATA = fstab \ … … 25 29 procfs.conf 26 30 31 install-pkgconfdir: 32 $(mkinstalldirs) -m 755 $(DESTDIR)$(pkgconfdir) 33 $(mkinstalldirs) -m 755 $(DESTDIR)$(pkgconfdir)/.defaults 34 27 35 EXTRA_DIST = $(nobase_pkgdata_DATA) \ 28 36 $(pkgconf_DATA) branches/1.0.4/scripts/Makefile.am
r77 r115 19 19 pkgdata_DATA = pathconfig 20 20 21 nobase_pkgdata_DATA = commands/exec.sh \ 21 nobase_pkgdata_DATA = commands/enter.sh \ 22 commands/exec.sh \ 22 23 commands/info.sh \ 23 24 commands/login.sh \ … … 28 29 commands/status.sh \ 29 30 commands/stop.sh \ 31 defaults/fstab \ 32 defaults/mtab \ 33 defaults/procfs.conf \ 34 lib/fs.sh \ 30 35 lib/util.sh \ 31 36 lib/vps.sh branches/1.0.4/scripts/commands/info.sh
r75 r115 45 45 vps.loadconfig 46 46 47 for i in $(vps.config list); do 48 echo -n "${i}: " 49 vps.config get ${i} 47 list=(VNAME VDIR VX_XID VX_INIT) 48 49 for i in ${list[@]}; do 50 echo -n "${i}=" 51 eval echo \$${i} 50 52 done 51 53 } branches/1.0.4/scripts/commands/procfs.sh
r75 r115 44 44 procfs.main() { 45 45 local subcmd=$1 && shift 46 local flags opts46 local procfsconf flags opts 47 47 local ok=1 passed=0 48 48 … … 55 55 56 56 [ "${subcmd}" != "unhide" ] && util.error "unknown subcommand '${subcmd}'" 57 58 procfsconf=$(fs.best_file $1 \ 59 ${__PKGCONFDIR}/procfs.conf \ 60 ${__PKGDATADEFAULTSDIR}/procfs.conf) 57 61 58 62 while read line; do … … 81 85 ok=0 82 86 fi 83 done < ${__PKGCONFDIR}/procfs.conf87 done < "${procfsconf}" 84 88 85 89 [ ${ok} -eq 1 ] && exit 0 branches/1.0.4/scripts/commands/stop.sh
r75 r115 67 67 vps.halt 68 68 69 if vps.running; then 70 local cnt=0 71 local timeout=$(vps.config get vps.timeout) 72 : ${timeout:=30} 69 while [ ${cnt} -lt ${VX_TIMEOUT_KILL} ]; do 70 vps.running || break 73 71 74 while [ ${cnt} -lt ${timeout} ]; do 75 vps.running || { echo; break; } 76 77 echo -n "." 78 79 sleep 2 80 let cnt+=2 81 done 82 fi 72 echo -n "." 73 74 sleep 2 75 let cnt+=2 76 done 77 78 echo 83 79 84 80 if vps.running; then branches/1.0.4/scripts/lib/util.sh
r76 r115 18 18 19 19 : ${_HAVE_PATHCONFIG:?"Internal error: no pathconfig in util.sh"} 20 21 util.exec_scriplets() { 22 # $1 - base script path 23 local path=$1 24 25 [ -z "${path}" ] && return 0 26 27 [ ! -e ${path} -a ! -e ${path}.d ] && return 0 28 29 for i in ${path} ${path}.d/*; do 30 [ -r ${i} ] && source ${i} 31 done 32 } 20 33 21 34 util.error() { … … 39 52 } 40 53 54 util.array_to_list() { 55 local list 56 57 [ -z "$1" ] && return 0 58 59 while true; do 60 list="${list},${1}" 61 [ -z "$2" ] && break 62 shift 63 done 64 65 echo ${list/,} 66 } 67 41 68 _HAVE_LIB_UTIL=1 branches/1.0.4/scripts/lib/vps.sh
r76 r115 19 19 : ${_HAVE_PATHCONFIG:?"Internal error: no pathconfig in vps.sh"} 20 20 21 [ -z "${_HAVE_LIB_FS}" ] && source ${_LIB_FS} 21 22 [ -z "${_HAVE_LIB_UTIL}" ] && source ${_LIB_UTIL} 22 23 vps.config() {24 # $1 - subcommand25 # $2 - configuration key26 [ -z "${VNAME}" ] && util.error "vps.config: VNAME missing"27 28 local subcmd=$129 local key=$230 31 [ -z "${subcmd}" ] && util.error "vps.config: missing argument <subcmd>"32 33 case ${subcmd} in34 get)35 [ -z "${key}" ] && util.error "vps.config: missing argument <key>"36 ${_VCONFIG} -G -n ${VNAME} -k ${key}37 ;;38 39 list)40 if [ -z "${key}" ]; then41 ${_VCONFIG} -L42 else43 ${_VCONFIG} -L | grep "^${key}"44 fi45 ;;46 47 *)48 util.error "vps.config: unknown subcommand '${subcmd}'"49 esac50 }51 23 52 24 vps.loadconfig() { 53 25 [ -z "${VNAME}" ] && util.error "vps.loadconfig: VNAME missing" 54 26 27 : ${VDIRBASE:=${__VDIRBASE}} 28 : ${VCONFDIR:=${__PKGCONFDIR}/${VNAME}} 29 30 if [ ! -e ${VCONFDIR}/context.conf ]; then 31 util.error "vps.loadconfig: cannot find configuration for '${VNAME}'" 32 fi 33 34 source ${VCONFDIR}/context.conf 35 55 36 # sanity checks 56 VDIR=$(vps.config get namespace.root) 57 VX_INIT=$(vps.config get vps.init) 58 VX_XID=$(vps.config get context.id) 59 60 : ${VDIR:=${__VDIRBASE}/${VNAME}} 61 62 [ -z "${VX_INIT}" ] && util.error "vps.loadconfig: missing configuration for vps.init" 63 [ -z "${VX_XID}" ] && util.error "vps.loadconfig: missing configuration for context.id" 64 65 if [ ! -d ${VDIR} ]; then 37 local needed="VX_XID,VX_INIT" 38 39 for i in ${needed}; do 40 if [ -z "$(eval echo \$${i})" ]; then 41 util.error "vps.loadconfig: missing configuration for ${i}" 42 fi 43 done 44 45 # defaults 46 : ${VDIR:=${VDIRBASE}/${VNAME}} 47 : ${VX_TIMEOUT_KILL:=30} 48 : ${VX_SHELL:=/bin/bash} 49 50 if [ ! -d "${VDIR}" ]; then 66 51 util.error "vps.loadconfig: cannot find installation for '${VNAME}'" 67 52 fi … … 139 124 case ${subcmd} in 140 125 setup) 141 vps.config get net.addr | while read line; do142 ${_VNCONTEXT} -A -n ${VX_XID} -a ${ line}126 for i in ${NX_ADDR[@]}; do 127 ${_VNCONTEXT} -A -n ${VX_XID} -a ${i} 143 128 done 144 129 ;; … … 181 166 case ${subcmd} in 182 167 set) 183 for i in $(vps.config list limit.); do 184 res=${i/limit.} 185 limit=$(vps.config get ${i}) 186 187 [ -z "${limit}" ] && continue 168 for i in ${VX_LIMIT[@]}; do 169 res=${i/=*} 170 limit=${i/*=} 188 171 189 172 ${_VLIMIT} -S -r ${res} -l ${limit} -x ${VX_XID} … … 199 182 # $1 - subcommand 200 183 local subcmd=$1 201 local sched202 184 203 185 [ -z "${subcmd}" ] && util.error "vps.sched: missing argument <subcmd>" … … 206 188 case ${subcmd} in 207 189 set) 208 sched=$(vps.config get context.sched) 209 210 [ -z "${sched}" ] && return 0 211 212 ${_VSCHED} -S -b ${sched} -x ${VX_XID} 190 [ -z "${VX_SCHED}" ] && return 0 191 192 ${_VSCHED} -S -b $(util.array_to_list ${VX_SCHED[@]}) -x ${VX_XID} 213 193 ;; 214 194 … … 221 201 # $1 - subcommand 222 202 local subcmd=$1 223 local uts name203 local names 224 204 225 205 [ -z "${subcmd}" ] && util.error "vps.uname: missing argument <subcmd>" … … 231 211 ${_VUNAME} -S -n CONTEXT=${VNAME} -x ${VX_XID} 232 212 233 for i in $(vps.config list uts.); do 234 uts=${i/uts.} 235 name=$(vps.config get ${i}) 236 237 [ -z "${name}" ] && continue 238 239 ${_VUNAME} -S -n ${uts}=${name} -x ${VX_XID} 240 done 213 [ -z "${VX_UNAME}" ] && return 0 214 215 ${_VUNAME} -S -n $(util.array_to_list ${VX_UNAME[@]}) -x ${VX_XID} 241 216 ;; 242 217 … … 249 224 # $1 - subcommand 250 225 local subcmd=$1 251 local bcaps ccaps flags226 local names 252 227 253 228 [ -z "${subcmd}" ] && util.error "vps.flags: missing argument <subcmd>" … … 256 231 case ${subcmd} in 257 232 set) 258 bcaps=$(vps.config get context.bcapabilities) 259 ccaps=$(vps.config get context.ccapabilities) 260 flags=$(vps.config get context.flags) 261 262 if [ ! -z "${bcaps}" ]; then 263 ${_VFLAGS} -S -b ${bcaps} -x ${VX_XID} 233 if [ ! -z "${VX_BCAPS}" ]; then 234 ${_VFLAGS} -S -b $(util.array_to_list ${VX_BCAPS[@]}) -x ${VX_XID} 264 235 fi 265 236 266 if [ ! -z "${ ccaps}" ]; then267 ${_VFLAGS} -S -c $ {ccaps}-x ${VX_XID}237 if [ ! -z "${VX_CCAPS}" ]; then 238 ${_VFLAGS} -S -c $(util.array_to_list ${VX_CCAPS[@]}) -x ${VX_XID} 268 239 fi 269 240 270 if [ ! -z "${ flags}" ]; then271 ${_VFLAGS} -S -f $ {flags}-x ${VX_XID}241 if [ ! -z "${VX_FLAGS}" ]; then 242 ${_VFLAGS} -S -f $(util.array_to_list ${VX_FLAGS[@]}) -x ${VX_XID} 272 243 fi 273 244 ;; … … 286 257 287 258 case ${VX_INIT} in 288 sysvinit )259 sysvinit|init|plain) 289 260 ${_VNAMESPACE} -E -x ${VX_XID} -- \ 290 261 ${_VEXEC} -cfi -n ${VX_XID} -x ${VX_XID} -- /sbin/init … … 326 297 327 298 case ${VX_INIT} in 328 sysvinit )299 sysvinit|init|plain) 329 300 ${_VFLAGS} -S -f REBOOT_KILL -x ${VX_XID} 330 301 … … 375 346 [ -z "${VDIR}" ] && util.error "vps.login: VDIR missing" 376 347 377 local shell=$(vps.config get vps.shell)378 379 : ${shell:=/bin/bash}380 381 348 pushd ${VDIR} >/dev/null 382 349 ${_VNAMESPACE} -E -x ${VX_XID} -- \ 383 ${_VLOGIN} -n ${VX_XID} -x ${VX_XID} -- ${ shell}350 ${_VLOGIN} -n ${VX_XID} -x ${VX_XID} -- ${VX_SHELL} 384 351 popd >/dev/null 385 352 } … … 393 360 vps.mount() { 394 361 # $1 - mount rootfs (optional) 395 local fstab=$(vps.config get namespace.fstab) 396 local mtab=$(vps.config get namespace.mtab) 397 398 fstab_tmp=$(mktemp) 399 mtab_tmp=$(mktemp) 400 401 if [ -n "${fstab}" ]; then 402 echo ${fstab} > ${fstab_tmp} 403 else 404 cat ${__PKGCONFDIR}/fstab > ${fstab_tmp} 405 fi 406 407 if [ -n "${mtab}" ]; then 408 echo ${mtab} > ${fstab_tmp} 409 else 410 cat ${__PKGCONFDIR}/mtab > ${mtab_tmp} 411 fi 362 local fstab mtab 363 364 fstab=$(fs.best_file ${VCONFDIR}/init/fstab \ 365 ${__PKGCONFDIR}/.defaults/init/fstab \ 366 ${__PKGDATADEFAULTSDIR}/fstab) 367 368 mtab=$(fs.best_file ${VCONFDIR}/init/mtab \ 369 ${__PKGCONFDIR}/.defaults/init/mtab \ 370 ${__PKGDATADEFAULTSDIR}/mtab) 412 371 413 372 [ -z "${VDIR}" ] && util.error "vps.mount: VDIR missing" 414 373 [ -z "${VX_XID}" ] && util.error "vps.mount: VX_XID missing" 374 375 [ -z "${fstab}" ] && util.error "vps.mount: cannot find fstab" 376 [ -z "${mtab}" ] && util.error "vps.mount: cannot find mtab" 415 377 416 378 if [ "$1" == "root" ]; then … … 420 382 pushd ${VDIR} >/dev/null 421 383 422 cp ${mtab_tmp} etc/mtab 384 if [ -n "${mtab}" ]; then 385 cp ${mtab} etc/mtab 386 else 387 : > etc/mtab 388 fi 423 389 424 390 ${_VNAMESPACE} -E -x ${VX_XID} -- \ 425 ${_VMOUNT} -M -f ${fstab _tmp} -m etc/mtab391 ${_VMOUNT} -M -f ${fstab} -m etc/mtab 426 392 427 393 popd >/dev/null … … 432 398 433 399 vps.umount() { 434 [ -z "${VDIR}" ] && util.error "vps.mount: VDIR missing" 400 local fstab 401 402 fstab=$(fs.best_file ${VCONFDIR}/init/fstab \ 403 ${__PKGCONFDIR}/.defaults/init/fstab \ 404 ${__PKGDATADEFAULTSDIR}/fstab) 405 435 406 [ -z "${VX_XID}" ] && util.error "vps.umount: VX_XID missing" 436 407 408 [ -z "${fstab}" ] && util.error "vps.umount: cannot find fstab" 409 437 410 pushd ${VDIR} >/dev/null 411 438 412 ${_VNAMESPACE} -E -x ${VX_XID} -- \ 439 ${_VMOUNT} -U -m etc/mtab 413 ${_VMOUNT} -U -f ${fstab} -m etc/mtab 414 440 415 popd >/dev/null 441 416 } branches/1.0.4/scripts/pathconfig.in
r75 r115 34 34 __PKGCONFDIR='@PKGCONFDIR@' 35 35 __VDIRBASE='@VDIRBASE@' 36 __CONFDEFAULTSDIR="${__PKGCONFDIR}/.defaults" 36 37 37 38 # package data paths 38 39 __PKGDATACOMMANDSDIR="${__PKGDATADIR}/commands" 40 __PKGDATADEFAULTSDIR="${__PKGDATADIR}/defaults" 39 41 __PKGDATALIBDIR="${__PKGDATADIR}/lib" 40 42 branches/1.0.4/src/tools/lockfile.c
r78 r115 62 62 void cmd_help() 63 63 { 64 vu_printf("Usage: %s <opts>*\n"64 vu_printf("Usage: %s <opts>*\n" 65 65 "\n" 66 66 "Available options:\n" … … 119 119 120 120 /* check command line */ 121 if (opts.lockfile == NULL )121 if (opts.lockfile == NULL || *opts.lockfile == '\0') 122 122 EXIT("No lockfile specified", EXIT_USAGE); 123 123 124 if (opts.syncpipe == NULL )124 if (opts.syncpipe == NULL || *opts.syncpipe == '\0') 125 125 EXIT("No syncpipe specified", EXIT_USAGE); 126 126 branches/1.0.4/src/tools/nidof.c
r82 r115 40 40 exit(EXIT_COMMAND); 41 41 42 vu_printf("%d\n", pid);42 vu_printf("%d\n", pid); 43 43 44 44 exit(EXIT_SUCCESS); branches/1.0.4/src/tools/vattr.c
r78 r115 86 86 void cmd_help() 87 87 { 88 vu_printf("Usage: %s <opts>* <file>*\n"88 vu_printf("Usage: %s <opts>* <file>*\n" 89 89 "\n" 90 90 "Available commands:\n" … … 163 163 /* syscall */ 164 164 if (vx_set_iattr(&iattr) == -1) { 165 vu_printf("vx_set_iattr(%s): %s\n", iattr.filename, strerror(errno));165 vu_printf("vx_set_iattr(%s): %s\n", iattr.filename, strerror(errno)); 166 166 return 1; 167 167 } … … 216 216 vu_snprintf(ptr, 7, " noxid"); 217 217 218 vu_printf("%s", buf);218 vu_printf("%s", buf); 219 219 220 220 if (src != 0) 221 vu_printf(" %s ->", src);221 vu_printf(" %s ->", src); 222 222 223 223 if (display != 0) 224 vu_printf(" %s\n", display);224 vu_printf(" %s\n", display); 225 225 else 226 vu_printf(" %s\n", file);226 vu_printf(" %s\n", file); 227 227 } 228 228 … … 242 242 243 243 if (lstat(file, &sb) == -1) { 244 vu_printf("lstat(%s): %s\n", file, strerror(errno));244 vu_printf("lstat(%s): %s\n", file, strerror(errno)); 245 245 return 1; 246 246 } … … 259 259 return 0; 260 260 261 vu_printf("readlink(%s): %s\n", display, strerror(errno));261 vu_printf("readlink(%s): %s\n", display, strerror(errno)); 262 262 return 1; 263 263 } … … 267 267 if (opts.follow) { 268 268 if (stat(link_buf, &sb) == -1) { 269 vu_printf("stat(%s): %s\n", link_buf, strerror(errno));269 vu_printf("stat(%s): %s\n", link_buf, strerror(errno)); 270 270 return 1; 271 271 } … … 291 291 292 292 if (dir == 0) { 293 vu_printf("opendir(%s): %s\n", path, strerror(errno));293 vu_printf("opendir(%s): %s\n", path, strerror(errno)); 294 294 return 1; 295 295 } … … 311 311 while ((ent = readdir(dir)) != 0) { 312 312 if (lstat(ent->d_name, &sb) == -1) { 313 vu_printf("lstat(%s): %s\n", ent->d_name, strerror(errno));313 vu_printf("lstat(%s): %s\n", ent->d_name, strerror(errno)); 314 314 return errcnt + 1; 315 315 } … … 361 361 362 362 if (lstat(path, &st) == -1) { 363 vu_printf("lstat(%s): %s\n", path, strerror(errno));363 vu_printf("lstat(%s): %s\n", path, strerror(errno)); 364 364 return 1; 365 365 } 366 367 if (S_ISDIR(st.st_mode) && 368 ((cmds.set && opts.recurse) || 369 (!cmds.set && !opts.dirent))) { 370 rc = walk_tree(path, 0); 371 } else { 366 367 if (opts.dirent || !S_ISDIR(st.st_mode || cmds.set)) { 368 /* First operate on the file/folder itself if either: 369 * - It's not a directory 370 * - Even dires should be processed 371 * - If we are setting value 372 */ 372 373 char *pathc = strdup(path); 373 374 char *basec = strdup(path); … … 377 378 chdir(dname); 378 379 rc = handle_file(bname, path); 380 } 381 382 // If we need to recurse, do it 383 if (S_ISDIR(st.st_mode) && 384 ((cmds.set && opts.recurse) || (!cmds.set && !opts.dirent))) { 385 rc = walk_tree(path, 0); 379 386 } 380 387 branches/1.0.4/src/tools/vconfig.c
r78 r115 53 53 void cmd_help() 54 54 { 55 vu_printf("Usage: %s <command> <opts>*\n"55 vu_printf("Usage: %s <command> <opts>*\n" 56 56 "\n" 57 57 "Available commands:\n" branches/1.0.4/src/tools/vdlimit.c
r78 r115 65 65 void cmd_help() 66 66 { 67 vu_printf("Usage: %s <command> <opts>* <mountpoint>\n"67 vu_printf("Usage: %s <command> <opts>* <mountpoint>\n" 68 68 "\n" 69 69 "Available commands:\n" branches/1.0.4/src/tools/vexec.c
r78 r115 32 32 #include <sys/wait.h> 33 33 #include <vserver.h> 34 #include <errno.h> 34 35 35 36 #include <linux/vserver/context.h> … … 55 56 void cmd_help() 56 57 { 57 vu_printf("Usage: %s <opts>* -- <command> <args>*\n"58 vu_printf("Usage: %s <opts>* -- <command> <args>*\n" 58 59 "\n" 59 60 "Available options:\n" … … 185 186 PEXIT("Failed to chroot to cwd", EXIT_COMMAND); 186 187 } 187 188 // TODO: change TTY and stdin/out to something sensible for the guest! 189 // -- check for /dev/console or /dev/tty in the guest's root 190 if (opts.init) { 191 vu_printf("Preparing for switching stdin to /dev/console...\n"); 192 struct stat st; 193 if (stat("/dev/console", &st) == -1) { 194 vu_printf("Failed to stat /dev/console: %s\n", strerror(errno)); 195 } else if (!S_ISCHR(st.st_mode)) { 196 int fd = open("/dev/console", O_RDWR); // O_NOCTTY); 197 if (fd < 0) vu_printf("Failed to open /dev/console: %s\n", strerror(errno)); 198 if (fd > 0) dup2(fd, 0); 199 if (fd >= 0 && fd != 1) dup2(fd, 1); 200 if (fd >= 0 && fd != 2) dup2(fd, 2); 201 if (fd > 2) close(fd); 202 } else 203 vu_printf("Cannot use /dev/console as it's not a character device.\n"); 204 } 205 188 206 if(execvp(argv[optind], argv+optind) == -1) 189 207 PEXIT("Failed to start init", EXIT_COMMAND); branches/1.0.4/src/tools/vflags.c
r78 r115 53 53 void cmd_help() 54 54 { 55 vu_printf("Usage: %s <command> <opts>*\n"55 vu_printf("Usage: %s <command> <opts>*\n" 56 56 "\n" 57 57 "Available commands:\n" branches/1.0.4/src/tools/vinfo.c
r78 r115 44 44 void cmd_help() 45 45 { 46 vu_printf("Usage: %s <opts>\n"46 vu_printf("Usage: %s <opts>\n" 47 47 "\n" 48 48 "Available options:\n" … … 84 84 PEXIT("Failed to get VServer interface version", EXIT_COMMAND); 85 85 86 vu_printf("%04x:%04x\n", (version>>16)&0xFFFF, version&0xFFFF);86 vu_printf("%04x:%04x\n", (version>>16)&0xFFFF, version&0xFFFF); 87 87 88 88 goto out; branches/1.0.4/src/tools/vkill.c
r78 r115 47 47 void cmd_help() 48 48 { 49 vu_printf("Usage: %s <opts>*\n"49 vu_printf("Usage: %s <opts>*\n" 50 50 "\n" 51 51 "Available options:\n" branches/1.0.4/src/tools/vlimit.c
r78 r115 55 55 void cmd_help() 56 56 { 57 vu_printf("Usage: %s <command> <opts>**\n"57 vu_printf("Usage: %s <command> <opts>**\n" 58 58 "\n" 59 59 "Available commands:\n" branches/1.0.4/src/tools/vlogin.c
r78 r115 66 66 void cmd_help() 67 67 { 68 vu_printf("Usage: %s <opts>* [-- <shell> <args>*]\n"68 vu_printf("Usage: %s <opts>* [-- <shell> <args>*]\n" 69 69 "\n" 70 70 "Available options:\n" … … 144 144 { 145 145 terminal_reset(); 146 vu_printf("\n"); /* for cosmetic reasons */146 vu_printf("\n"); /* for cosmetic reasons */ 147 147 } 148 148 … … 286 286 EXIT("Invalid xid", EXIT_USAGE); 287 287 288 /* TODO: also change namespace? */ 289 288 290 /* enter context */ 289 291 if (opts.nid > 1 && nx_migrate(opts.nid) == -1) branches/1.0.4/src/tools/vmount.c
r78 r115 37 37 #include <sys/file.h> 38 38 #include <vserver.h> 39 #include <sys/wait.h> 40 #include <unistd.h> 39 41 40 42 #include "printf.h" … … 82 84 void cmd_help() 83 85 { 84 vu_printf("Usage: %s <command> <opts>* -- <program> <args>*\n"86 vu_printf("Usage: %s <command> <opts>* -- <program> <args>*\n" 85 87 "\n" 86 88 "Available commands:\n" … … 204 206 205 207 #undef GET_STRING 206 207 /* set safe mount flags */ 208 fsent->flags = MS_NODEV; 209 210 /* perform sanity checks */ 211 if (strcmp(fsent->vfstype, "swap") == 0) return 1; 212 if (strcmp(fsent->vfstype, "devpts") == 0) fsent->flags |= MS_NODEV; 213 if (strcmp(fsent->vfstype, "none") == 0) fsent->vfstype = 0; 214 215 /* check data */ 216 char *data = strdup(fsent->data); 217 char *buf; 218 219 #define CHECK_DATA(DATA,FLAGS) \ 220 if (strcasecmp(buf, DATA) == 0) fsent->flags |= FLAGS; 221 222 while ((buf = strsep(&data, ",")) != 0) { 223 CHECK_DATA("bind", MS_BIND) 224 CHECK_DATA("rbind", MS_BIND|MS_REC) 225 CHECK_DATA("noatime", MS_NOATIME) 226 CHECK_DATA("nodev", MS_NODEV) 227 CHECK_DATA("noexec", MS_NOEXEC) 228 CHECK_DATA("nodiratime", MS_NODIRATIME) 229 CHECK_DATA("nosuid", MS_NOSUID) 230 CHECK_DATA("ro", MS_RDONLY) 231 CHECK_DATA("sync", MS_SYNCHRONOUS) 232 } 233 234 #undef CHECK_DATA 235 208 236 209 return 0; 237 210 } … … 248 221 goto skip; 249 222 250 if (mount(fsent->source, ".", fsent->vfstype, fsent->flags, fsent->data) == -1) 223 char mcwd[PATH_MAX]; 224 if (getcwd(mcwd, PATH_MAX) == NULL) 225 goto error; 226 vu_printf("Mounting2 '%s' on '%s', type '%s' from '%s'\n", fsent->source, fsent->target, fsent->vfstype, mcwd); 227 228 if (mount(fsent->source, "/", fsent->vfstype, fsent->flags, fsent->data) == -1) 251 229
