Changeset 115

Show
Ignore:
Timestamp:
02/26/06 22:51:16 (3 years ago)
Author:
bonbons
Message:

Partial merge back to 1.0.3 for scripts -- config related

Improvements and bugfixes in C utilities

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.0.4/configure.ac

    r82 r115  
    1919# Generic configuration 
    2020AC_PREREQ(2.59) 
    21 AC_INIT(vserver-utils, 1.0.3, hollow@gentoo.org) 
     21AC_INIT(vserver-utils, 1.0.3.99, hollow@gentoo.org) 
    2222AC_CONFIG_HEADER([config.h]) 
    2323AC_GNU_SOURCE 
  • branches/1.0.4/etc/Makefile.am

    r75 r115  
    1919include $(top_srcdir)/m4/pathconfig.am 
    2020 
    21 nobase_pkgdata_DATA = examples/vservers.rc 
     21nobase_pkgdata_DATA = examples/context.conf \ 
     22                      examples/vservers.rc 
     23 
     24EXTRA_DIST = $(nobase_pkgdata_DATA) 
     25 
    2226 
    2327pkgconf_DATA = fstab \ 
     
    2529               procfs.conf 
    2630 
     31install-pkgconfdir: 
     32        $(mkinstalldirs) -m 755 $(DESTDIR)$(pkgconfdir) 
     33        $(mkinstalldirs) -m 755 $(DESTDIR)$(pkgconfdir)/.defaults 
     34 
    2735EXTRA_DIST = $(nobase_pkgdata_DATA) \ 
    2836             $(pkgconf_DATA) 
  • branches/1.0.4/scripts/Makefile.am

    r77 r115  
    1919pkgdata_DATA = pathconfig 
    2020 
    21 nobase_pkgdata_DATA = commands/exec.sh \ 
     21nobase_pkgdata_DATA = commands/enter.sh \ 
     22                      commands/exec.sh \ 
    2223                      commands/info.sh \ 
    2324                      commands/login.sh \ 
     
    2829                      commands/status.sh \ 
    2930                      commands/stop.sh \ 
     31                      defaults/fstab \ 
     32                      defaults/mtab \ 
     33                      defaults/procfs.conf \ 
     34                      lib/fs.sh \ 
    3035                      lib/util.sh \ 
    3136                      lib/vps.sh 
  • branches/1.0.4/scripts/commands/info.sh

    r75 r115  
    4545        vps.loadconfig 
    4646         
    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} 
    5052        done 
    5153} 
  • branches/1.0.4/scripts/commands/procfs.sh

    r75 r115  
    4444procfs.main() { 
    4545        local subcmd=$1 && shift 
    46         local flags opts 
     46        local procfsconf flags opts 
    4747        local ok=1 passed=0 
    4848         
     
    5555         
    5656        [ "${subcmd}" != "unhide" ] && util.error "unknown subcommand '${subcmd}'" 
     57         
     58        procfsconf=$(fs.best_file $1 \ 
     59                                  ${__PKGCONFDIR}/procfs.conf \ 
     60                                  ${__PKGDATADEFAULTSDIR}/procfs.conf) 
    5761         
    5862        while read line; do 
     
    8185                        ok=0 
    8286                fi 
    83         done < ${__PKGCONFDIR}/procfs.conf 
     87        done < "${procfsconf}" 
    8488         
    8589        [ ${ok} -eq 1 ]     && exit 0 
  • branches/1.0.4/scripts/commands/stop.sh

    r75 r115  
    6767        vps.halt 
    6868         
    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 
    7371                 
    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 
    8379         
    8480        if vps.running; then 
  • branches/1.0.4/scripts/lib/util.sh

    r76 r115  
    1818 
    1919: ${_HAVE_PATHCONFIG:?"Internal error: no pathconfig in util.sh"} 
     20 
     21util.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} 
    2033 
    2134util.error() { 
     
    3952} 
    4053 
     54util.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 
    4168_HAVE_LIB_UTIL=1 
  • branches/1.0.4/scripts/lib/vps.sh

    r76 r115  
    1919: ${_HAVE_PATHCONFIG:?"Internal error: no pathconfig in vps.sh"} 
    2020 
     21[ -z "${_HAVE_LIB_FS}" ]   && source ${_LIB_FS} 
    2122[ -z "${_HAVE_LIB_UTIL}" ] && source ${_LIB_UTIL} 
    22  
    23 vps.config() { 
    24 # $1 - subcommand 
    25 # $2 - configuration key 
    26         [ -z "${VNAME}" ] && util.error "vps.config: VNAME missing" 
    27          
    28         local subcmd=$1 
    29         local key=$2 
    30          
    31         [ -z "${subcmd}" ] && util.error "vps.config: missing argument <subcmd>" 
    32          
    33         case ${subcmd} in 
    34                 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}" ]; then 
    41                                 ${_VCONFIG} -L 
    42                         else 
    43                                 ${_VCONFIG} -L | grep "^${key}" 
    44                         fi 
    45                         ;; 
    46                  
    47                 *) 
    48                         util.error "vps.config: unknown subcommand '${subcmd}'" 
    49         esac 
    50 } 
    5123 
    5224vps.loadconfig() { 
    5325        [ -z "${VNAME}" ] && util.error "vps.loadconfig: VNAME missing" 
    5426         
     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         
    5536        # 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 
    6651                util.error "vps.loadconfig: cannot find installation for '${VNAME}'" 
    6752        fi 
     
    139124        case ${subcmd} in 
    140125                setup) 
    141                         vps.config get net.addr | while read line; do 
    142                                 ${_VNCONTEXT} -A -n ${VX_XID} -a ${line
     126                        for i in ${NX_ADDR[@]}; do 
     127                                ${_VNCONTEXT} -A -n ${VX_XID} -a ${i
    143128                        done 
    144129                        ;; 
     
    181166        case ${subcmd} in 
    182167                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/*=} 
    188171                                 
    189172                                ${_VLIMIT} -S -r ${res} -l ${limit} -x ${VX_XID} 
     
    199182# $1 - subcommand 
    200183        local subcmd=$1 
    201         local sched 
    202184         
    203185        [ -z "${subcmd}" ] && util.error "vps.sched: missing argument <subcmd>" 
     
    206188        case ${subcmd} in 
    207189                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} 
    213193                        ;; 
    214194                 
     
    221201# $1 - subcommand 
    222202        local subcmd=$1 
    223         local uts name 
     203        local names 
    224204         
    225205        [ -z "${subcmd}" ] && util.error "vps.uname: missing argument <subcmd>" 
     
    231211                        ${_VUNAME} -S -n CONTEXT=${VNAME} -x ${VX_XID} 
    232212                         
    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} 
    241216                        ;; 
    242217                 
     
    249224# $1 - subcommand 
    250225        local subcmd=$1 
    251         local bcaps ccaps flag
     226        local name
    252227         
    253228        [ -z "${subcmd}" ] && util.error "vps.flags: missing argument <subcmd>" 
     
    256231        case ${subcmd} in 
    257232                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} 
    264235                        fi 
    265236                         
    266                         if [ ! -z "${ccaps}" ]; then 
    267                                 ${_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} 
    268239                        fi 
    269240                         
    270                         if [ ! -z "${flags}" ]; then 
    271                                 ${_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} 
    272243                        fi 
    273244                        ;; 
     
    286257         
    287258        case ${VX_INIT} in 
    288                 sysvinit
     259                sysvinit|init|plain
    289260                        ${_VNAMESPACE} -E -x ${VX_XID} -- \ 
    290261                        ${_VEXEC} -cfi -n ${VX_XID} -x ${VX_XID} -- /sbin/init 
     
    326297         
    327298        case ${VX_INIT} in 
    328                 sysvinit
     299                sysvinit|init|plain
    329300                        ${_VFLAGS} -S -f REBOOT_KILL -x ${VX_XID} 
    330301                         
     
    375346        [ -z "${VDIR}" ]    && util.error "vps.login: VDIR missing" 
    376347         
    377         local shell=$(vps.config get vps.shell) 
    378          
    379         : ${shell:=/bin/bash} 
    380          
    381348        pushd ${VDIR} >/dev/null 
    382349        ${_VNAMESPACE} -E -x ${VX_XID} -- \ 
    383         ${_VLOGIN} -n ${VX_XID} -x ${VX_XID} -- ${shell
     350        ${_VLOGIN} -n ${VX_XID} -x ${VX_XID} -- ${VX_SHELL
    384351        popd >/dev/null 
    385352} 
     
    393360vps.mount() { 
    394361# $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) 
    412371         
    413372        [ -z "${VDIR}" ]   && util.error "vps.mount: VDIR missing" 
    414373        [ -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" 
    415377         
    416378        if [ "$1" == "root" ]; then 
     
    420382                pushd ${VDIR} >/dev/null 
    421383                 
    422                 cp ${mtab_tmp} etc/mtab 
     384                if [ -n "${mtab}" ]; then 
     385                        cp ${mtab} etc/mtab 
     386                else 
     387                        : > etc/mtab 
     388                fi 
    423389                 
    424390                ${_VNAMESPACE} -E -x ${VX_XID} -- \ 
    425                 ${_VMOUNT} -M -f ${fstab_tmp} -m etc/mtab 
     391                ${_VMOUNT} -M -f ${fstab} -m etc/mtab 
    426392                 
    427393                popd >/dev/null 
     
    432398 
    433399vps.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         
    435406        [ -z "${VX_XID}" ] && util.error "vps.umount: VX_XID missing" 
    436407         
     408        [ -z "${fstab}" ] && util.error "vps.umount: cannot find fstab" 
     409         
    437410        pushd ${VDIR} >/dev/null 
     411         
    438412        ${_VNAMESPACE} -E -x ${VX_XID} -- \ 
    439         ${_VMOUNT} -U -m etc/mtab 
     413        ${_VMOUNT} -U -f ${fstab} -m etc/mtab 
     414         
    440415        popd >/dev/null 
    441416} 
  • branches/1.0.4/scripts/pathconfig.in

    r75 r115  
    3434__PKGCONFDIR='@PKGCONFDIR@' 
    3535__VDIRBASE='@VDIRBASE@' 
     36__CONFDEFAULTSDIR="${__PKGCONFDIR}/.defaults" 
    3637 
    3738# package data paths 
    3839__PKGDATACOMMANDSDIR="${__PKGDATADIR}/commands" 
     40__PKGDATADEFAULTSDIR="${__PKGDATADIR}/defaults" 
    3941__PKGDATALIBDIR="${__PKGDATADIR}/lib" 
    4042 
  • branches/1.0.4/src/tools/lockfile.c

    r78 r115  
    6262void cmd_help() 
    6363{ 
    64  vu_printf("Usage: %s <opts>*\n" 
     64       vu_printf("Usage: %s <opts>*\n" 
    6565               "\n" 
    6666               "Available options:\n" 
     
    119119         
    120120        /* check command line */ 
    121         if (opts.lockfile == NULL
     121        if (opts.lockfile == NULL || *opts.lockfile == '\0'
    122122                EXIT("No lockfile specified", EXIT_USAGE); 
    123123         
    124         if (opts.syncpipe == NULL
     124        if (opts.syncpipe == NULL || *opts.syncpipe == '\0'
    125125                EXIT("No syncpipe specified", EXIT_USAGE); 
    126126         
  • branches/1.0.4/src/tools/nidof.c

    r82 r115  
    4040                exit(EXIT_COMMAND); 
    4141         
    42  vu_printf("%d\n", pid); 
     42       vu_printf("%d\n", pid); 
    4343                 
    4444        exit(EXIT_SUCCESS); 
  • branches/1.0.4/src/tools/vattr.c

    r78 r115  
    8686void cmd_help() 
    8787{ 
    88  vu_printf("Usage: %s <opts>* <file>*\n" 
     88       vu_printf("Usage: %s <opts>* <file>*\n" 
    8989               "\n" 
    9090               "Available commands:\n" 
     
    163163                /* syscall */ 
    164164                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)); 
    166166                        return 1; 
    167167                } 
     
    216216                        vu_snprintf(ptr, 7, " noxid"); 
    217217                 
    218         vu_printf("%s", buf); 
     218               vu_printf("%s", buf); 
    219219                 
    220220                if (src != 0) 
    221                 vu_printf(" %s ->", src); 
     221                       vu_printf(" %s ->", src); 
    222222                 
    223223                if (display != 0) 
    224                 vu_printf(" %s\n", display); 
     224                       vu_printf(" %s\n", display); 
    225225                else 
    226                 vu_printf(" %s\n", file); 
     226                       vu_printf(" %s\n", file); 
    227227        } 
    228228         
     
    242242         
    243243        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)); 
    245245                return 1; 
    246246        } 
     
    259259                                return 0; 
    260260                         
    261                 vu_printf("readlink(%s): %s\n", display, strerror(errno)); 
     261                       vu_printf("readlink(%s): %s\n", display, strerror(errno)); 
    262262                        return 1; 
    263263                } 
     
    267267                if (opts.follow) { 
    268268                        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)); 
    270270                                return 1; 
    271271                        } 
     
    291291         
    292292        if (dir == 0) { 
    293         vu_printf("opendir(%s): %s\n", path, strerror(errno)); 
     293               vu_printf("opendir(%s): %s\n", path, strerror(errno)); 
    294294                return 1; 
    295295        } 
     
    311311        while ((ent = readdir(dir)) != 0) { 
    312312                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)); 
    314314                        return errcnt + 1; 
    315315                } 
     
    361361         
    362362        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)); 
    364364                return 1; 
    365365        } 
    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                 */ 
    372373                char *pathc = strdup(path); 
    373374                char *basec = strdup(path); 
     
    377378                chdir(dname); 
    378379                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); 
    379386        } 
    380387         
  • branches/1.0.4/src/tools/vconfig.c

    r78 r115  
    5353void cmd_help() 
    5454{ 
    55  vu_printf("Usage: %s <command> <opts>*\n" 
     55       vu_printf("Usage: %s <command> <opts>*\n" 
    5656               "\n" 
    5757               "Available commands:\n" 
  • branches/1.0.4/src/tools/vdlimit.c

    r78 r115  
    6565void cmd_help() 
    6666{ 
    67  vu_printf("Usage: %s <command> <opts>* <mountpoint>\n" 
     67       vu_printf("Usage: %s <command> <opts>* <mountpoint>\n" 
    6868               "\n" 
    6969               "Available commands:\n" 
  • branches/1.0.4/src/tools/vexec.c

    r78 r115  
    3232#include <sys/wait.h> 
    3333#include <vserver.h> 
     34#include <errno.h> 
    3435 
    3536#include <linux/vserver/context.h> 
     
    5556void cmd_help() 
    5657{ 
    57  vu_printf("Usage: %s <opts>* -- <command> <args>*\n" 
     58       vu_printf("Usage: %s <opts>* -- <command> <args>*\n" 
    5859               "\n" 
    5960               "Available options:\n" 
     
    185186                                        PEXIT("Failed to chroot to cwd", EXIT_COMMAND); 
    186187                        } 
    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 
    188206                        if(execvp(argv[optind], argv+optind) == -1) 
    189207                                PEXIT("Failed to start init", EXIT_COMMAND); 
  • branches/1.0.4/src/tools/vflags.c

    r78 r115  
    5353void cmd_help() 
    5454{ 
    55  vu_printf("Usage: %s <command> <opts>*\n" 
     55       vu_printf("Usage: %s <command> <opts>*\n" 
    5656               "\n" 
    5757               "Available commands:\n" 
  • branches/1.0.4/src/tools/vinfo.c

    r78 r115  
    4444void cmd_help() 
    4545{ 
    46  vu_printf("Usage: %s <opts>\n" 
     46       vu_printf("Usage: %s <opts>\n" 
    4747               "\n" 
    4848               "Available options:\n" 
     
    8484                        PEXIT("Failed to get VServer interface version", EXIT_COMMAND); 
    8585                 
    86         vu_printf("%04x:%04x\n", (version>>16)&0xFFFF, version&0xFFFF); 
     86               vu_printf("%04x:%04x\n", (version>>16)&0xFFFF, version&0xFFFF); 
    8787                 
    8888                goto out; 
  • branches/1.0.4/src/tools/vkill.c

    r78 r115  
    4747void cmd_help() 
    4848{ 
    49  vu_printf("Usage: %s <opts>*\n" 
     49       vu_printf("Usage: %s <opts>*\n" 
    5050               "\n" 
    5151               "Available options:\n" 
  • branches/1.0.4/src/tools/vlimit.c

    r78 r115  
    5555void cmd_help() 
    5656{ 
    57  vu_printf("Usage: %s <command> <opts>**\n" 
     57       vu_printf("Usage: %s <command> <opts>**\n" 
    5858               "\n" 
    5959               "Available commands:\n" 
  • branches/1.0.4/src/tools/vlogin.c

    r78 r115  
    6666void cmd_help() 
    6767{ 
    68  vu_printf("Usage: %s <opts>* [-- <shell> <args>*]\n" 
     68       vu_printf("Usage: %s <opts>* [-- <shell> <args>*]\n" 
    6969               "\n" 
    7070               "Available options:\n" 
     
    144144{ 
    145145        terminal_reset(); 
    146  vu_printf("\n"); /* for cosmetic reasons */ 
     146       vu_printf("\n"); /* for cosmetic reasons */ 
    147147} 
    148148 
     
    286286                EXIT("Invalid xid", EXIT_USAGE); 
    287287         
     288        /* TODO: also change namespace? */ 
     289         
    288290        /* enter context */ 
    289291        if (opts.nid > 1 && nx_migrate(opts.nid) == -1) 
  • branches/1.0.4/src/tools/vmount.c

    r78 r115  
    3737#include <sys/file.h> 
    3838#include <vserver.h> 
     39#include <sys/wait.h> 
     40#include <unistd.h> 
    3941 
    4042#include "printf.h" 
     
    8284void cmd_help() 
    8385{ 
    84  vu_printf("Usage: %s <command> <opts>* -- <program> <args>*\n" 
     86       vu_printf("Usage: %s <command> <opts>* -- <program> <args>*\n" 
    8587                    "\n" 
    8688                    "Available commands:\n" 
     
    204206         
    205207#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 
    236209        return 0; 
    237210} 
     
    248221                goto skip; 
    249222         
    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) 
    251229