  Virtual Services Howto
  Brian Ackerman, brian@nycrc.net
  v1.2, 4 November 1997
  ɍ N, isaji@mxu.meshnet.or.jp
  23 Dec 1997

  ̃hLg̓T[rX̉z̕@ɂĂ܂܂Ăv
  ɉď܂B (ҁF󕶂Ɋւ鎿͕Kɍ܂ł肢
  ܂B܂HOWTO{(p)̍ŐVł ftp://sun-
  site.unc.edu/pub/Linux/docs/HOWTO/ ł܂)B
  ______________________________________________________________________

  ڎ

  1. Cg_NV
     1.1 KvȒm
     1.2 ړI
     1.3 tB[hobN
     1.4 
     1.5 쌠Azz(Copyright/Distribution)

  2. IPGCAX
  3. o[`f[(virtuald)
     3.1 ǂ̂悤ȓ邩
     3.2 inetd
     3.3 virtual.conf
     3.4 virtuald̃\[X

  4. zXNvg(Virt scripts)
     4.1 virtfs
     4.2 virtexec
     4.3 virtfsvirtexecɊւ钍

  5. DNS
  6. Syslog
     6.1 _
     6.2 @

  7. zFTP
  8. zWeb
  9. zIMail/Pop
     9.1 Qmail ̒ӓ_
     9.2 
     9.3 @
     9.4 ǂ@

  10. ̑zIɂł邱
  11. ܂Ƃ
  12. FAQ
  13. ƃ
     13.1 virtfsɂ
     13.2 ̑̃G[
        13.2.1 /var/log/syslog:
        13.2.2 FTP
        13.2.3 Mail
        13.2.4 Web

  ______________________________________________________________________

  1.  Cg_NV

  1.1.  KvȒm

  zT[rX̐ݒ͂Ȃɓ̂ł͂܂BbIȎ
  ɉĂȏ̒mKvƂ܂B̃hLgłLinux}
  V̐ݒ̎dɂĂ͎舵܂B

  ̃hLg𗝉ɂ͈ȉqׂhLg̓eɂƊ
  eł̂Ɖ肵܂B

  o  LinuxJ[l̃RpCIP aliasingT|[g̒ǉ IP alias mini-
     HOWTO

  o  lbg[NfoCX̃ZbgAbvƐݒ NET-3 HOWTO

  o  inetd̐ݒ NET-3 HOWTO

  o  lbg[NpbP[W̃RpCƃCXg[ Sendmail Site
     Apache Site Wu-Ftpd FAQ

  o  DNS̐ݒ DNS HOWTO

     ɏqׂɂĂ܂ĂȂ΁ÃpbP[
     WɊ悤ɏɎwꂽNg̃hLgǂ
     邱Ƃ߂܂B̃hLgeɂă[
     ĂĂԎ͏o܂BHOWTO̊Y钘҂ɒڕ
     B

  1.2.  ړI

  zT[rX̖ړĨ͕lbg[NJ[hgȂŕIPAh
  XP̃}VɔFƂ̂łBIPGCAX̓J[lIv
  VŁÃIvV͊elbg[NfoCXɈȏIPAhX
  蓖Ă悤ɂ邽߂̂łBJ[l̓obNOhŊeIPAh
  XɃXbv邱Ƃɂ葽dM (multiplexes)s܂B[
  U[ɂƂĂ͂ЂƂȏ̃lbg[NJ[h邩̂悤Ɍ킯
  łB

  ̑dM(multiplexing)ɂwww.domain1.com, www.domain2.comȂ
  Ƃ̃hCЂƂ̃hCx̃RXgŉ^cł܂Bc
  OȂƂɑ̃T[rX(ftp, web, mail)͂̂܂܂ł͂̃̕hC
  Ŏg܂BK؂ɓ삳邽߂ɂ́Aݒt@Cƃ\[X
  R[hCȂĂ͂Ȃ܂B̃hLg͉z}ṼZb
  eBOɂĂ̏Cǂ̂悤ɍsĂ܂B

  f[lɉzT[rX̋@\񋟂邽߂ɕKvłBgf
  [(virtuald)̃\[X́ǍhLgɏoĂ܂B

  1.3.  tB[hobN

  pbP[WAbvf[gꂽݒ̕ύXɁÃhL
  gg܂B̃hLgŁA͂肵ȂȂǂ̕s
  炻̒Ă⎿Ȃǂ[ɏđĉB܂Rg͂
  邾͂ƁAǂ̏͂킩ɂ𖾋LĉB̌
  ҂HOWTOSɖڂʂɂ݂܂BTuWFNgɂVIRTSERVICES
  HOWTOƏđĂƂ؂łB̑̃[͌lpƂ
  ܂Blp[ǂ܂[Ă܂
  Ȃ̂ŏ\ӂĉB

  ̃hLgŒ҂񎦂͂ق̈ɂȂ̂ŁÂ܂
  Rs[ĎgȂŉBǎҊe̊ɂ悤ɏ
  ĉB肪܂璘҂܂Ń[𑗂ĉB
  ̍ۃ[ɂ͂Ɛݒt@CAG[bZ[WĂ
  ΁AƖڂʂẲȂǂ̒Ă[ŕԎ܂B
  1.4.  

  V1.0 o[W

  V1.1 Virtual Web SectioñG[XV

  V1.2 t̍XV

  1.5.  쌠Azz(Copyright/Distribution)

  This document is Copyright (c) 1997 by The Computer Resource Center
  Inc.

  A verbatim copy may be reproduced or distributed in any medium
  physical or electronic without permission of the author.  Translations
  are similiarly permitted without express permission if it includes a
  notice on who translated it.  Commercial redistribution is allowed and
  encouraged; however please notify Computer Resource Center of any such
  distributions.

  Excerpts from the document may be used without prior consent provided
  that the derivative work contains the verbatim copy or a pointer to a
  verbatim copy.

  Permission is granted to make and distribute verbatim copies of this
  document provided the copyright notice and this permission notice are
  preserved on all copies.

  In short, we wish to promote dissemination of this information through
  as many channels as possible. However, I do wish to retain copyright
  on this HOWTO document, and would like to be notified of any plans to
  redistribute this HOWTO.

  (a󕶂tĂ܂AȒ쌠͉p̌ɏ]܂)

  ҂̏FƂ炸Ɍ̃Rs[ĕI/dqI}̂ŉ/zz
  ܂܂B|lɓʂȋ͂܂񂪁Ȁꍇ͒N|
  󂵂̂KLĉBpIȍĔzz͔F߂܂B܂
  B̂悤Ȕzz鎞 Computer Resource Centerɂ܂œ͂
  oĉB

  {̈p͎O̓(p⌴ւ̃|C^܂񂾓e
  ۂ̓)ȂŎgĂĂ܂܂B

  hLǧRs[/zzۂ́A쌠̕\₱̋
  Ɋ܂܂Ă\łB

  ł邾̕ł̏񂪕y邱Ɗ]܂BhL
  g̒쌠͕ی삳܂Ĕzzꍇ͓͂oĉB

  2.  IPGCAX

  IPGCAX(IP aliasing)͉zzXg}Vғ邽߂ɐݒ肷J
  [lIvV̂ƂłBmini-HOWTOłɂ̂łQƂ
   (IP aliasing)Bݒ@̎ȂǂĂ܂B (󒍁F
  ̓IȃGCAX̐ݒBJ[lIvVŃGCAXIvVI
  ăJ[l̍č\z܂B̌root

    ifconfig eth0:0 (ǉIP)
    route add -host (ǉIP) dev eth0:0

  Ƃ܂Bڂ́uNET-2/3-HOWTOv13.11.2.1QƂĉ)B

  3.  o[`f[(virtuald)

  3.1.  ǂ̂悤ȓ邩

  lbg[Nڑ"IPAhX""|[gԍ"̃yAȂĂ܂B
  lbg[NvO~OAPI(Applications Program
  Interface)sockets apiƌĂ΂܂B\Pbg͊Jt@Ĉ悤
  UAɑ΂ǂݏ邱ƂŃlbg[NoRŃf[^
  Ƃ肪ł܂B

  [J\PbgIPAhXԂt@NVR[getsockname 
  ܂B

  virtualdgetsockname(󒍁F/lib/libc.so)Aǂ̃[J}VIP
  ANZXĂ邩߂̂ɗp܂B Virtuald͐ݒt@C
  ݍ݁AIPɑΉfBNg擾܂B̃fBNg
  chrootAۂɍsT[rXɐڑn܂B

   chroot  ̓[gfBNg'/' ʂ̃fBNgɃZbgA
  ̃fBNg(V[gfBNg)ɂSĂ͎̂̂s
  ĂvO͌܂(؂藣܂)BĊeIPAh
  X͂ꂼ̉zt@CVXe擾܂B̓lbg[Nv
  O͓ߓIȂ̂(ɏ悤ȑ͉BĂ̂)Av
  O͉Ȃ̂悤ɓ삵܂B

  ̂悤ɂāAinetdƂvOƘAꂽVirtuald ͂낢
  ȃT[rXzĎgƂł̂łB

  3.2.  inetd

  Inetd͕̃|[gĎAڑꍇ(Ⴆpopv
  ƂȂǂ)lbg[NlSVG[VsĎw肳ꂽvOɐ
  nX[p[T[ołBɂAKvȂĉĂȂ
  T[oȂ悤ɂ܂B

  WI /etc/inetd.conft@C

  ftp stream tcp nowait root /usr/sbin/tcpd wu.ftpd -l -a
  pop-3 stream tcp nowait root /usr/sbin/tcpd in.qpop -s

  ƂȂ܂B(󒍁Fpop-3pop3̏ꍇpop3ɂĉ)B

  ܂zI/etc/inetd.conft@C

  ftp stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.ftp wu.ftpd -l -a
  pop-3 stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.pop in.qpop -s

  ƂȂ܂B

  3.3.  virtual.conf

  ꂼ̃T[rXɑΉIPƃfBNgRg[
  conft@C擾܂B̃}X^[conft@CA܂hC
  ̈قȂ郊Xg̃T[rXKvȂƂ͂ɉconft@Cp
  邱Ƃł܂Bvirtual.conf͈ȉ̂悤ȓełB

  # This is a comment and so are blank lines

  # Format IP <SPACE> dir <NOSPACES>
  10.10.10.129 /virtual/foo.bar.com
  10.10.10.130 /virtual/bar.foo.com
  10.10.10.157 /virtual/boo.la.com

  (󒍁Fۂ̒g͊eݒɍ킹ďĉBĂ
  t@C(initd.conf̐ݒɍ킹)YfBNgуt@C
  ɃRs[܂)B

  3.4.  virtuald̃\[X

  (󒍁FVirtuald̃\[X gcc -o viturald virtuald.cƂăRpC
  ł܂B܂͂̕ƍ킹邽߂/usr/binɃRs[܂)

  ______________________________________________________________________
  #include <netinet/in.h>
  #include <sys/socket.h>
  #include <arpa/inet.h>
  #include <stdarg.h>
  #include <string.h>
  #include <syslog.h>
  #include <stdio.h>

  #define BUFSIZE 8192

  main(int argc,char **argv)
  {
          char buffer[BUFSIZE];
          char *ipaddr,*dir;

          logit("Virtuald Starting: $Revision: 1.2 $");
          if (!argv[1])
          {
                  logit("invalid arguments: no conf file");
                  quitting_virtuald(0);
          }
          if (!argv[2])
          {
                  logit("invalid arguments: no program to run");
                  quitting_virtuald(0);
          }
          if (getipaddr(&ipaddr))
          {
                  logit("getipaddr failed");
                  quitting_virtuald(0);
          }
          sprintf(buffer,"Incoming ip: %s",ipaddr);
          logit(buffer);
          if (iptodir(&dir,ipaddr,argv[1]))
          {
                  logit("iptodir failed");
                  quitting_virtuald(0);
          }
          if (chroot(dir)<0)
          {
                  logit("chroot failed: %m");
                  quitting_virtuald(0);
          }
          sprintf(buffer,"Chroot dir: %s",dir);
          logit(buffer);
          if (chdir("/")<0)
          {
                  logit("chdir failed: %m");
                  quitting_virtuald(0);
          }
          if (execvp(argv[2],argv+2)<0)
          {
                  logit("execvp failed: %m");
                  quitting_virtuald(0);
          }
  }

  int logit(char *buf)
  {
          openlog("virtuald",LOG_PID,LOG_DAEMON);
          syslog(LOG_ERR,buf);
          closelog();
          return 0;
  }

  int quitting_virtuald(int retval)
  {
          exit(retval);
          return 0;
  }

  int getipaddr(char **ipaddr)
  {
          struct sockaddr_in virtual_addr;
          static char ipaddrbuf[BUFSIZE];
          int virtual_len;
          char *ipptr;

          virtual_len=sizeof(virtual_addr);
          if (getsockname(0,(struct sockaddr *)&virtual_addr,&virtual_len)<0)
          {
                  logit("getipaddr: getsockname failed: %m");
                  return -1;
          }
          if (!(ipptr=inet_ntoa(virtual_addr.sin_addr)))
          {
                  logit("getipaddr: inet_ntoa failed: %m");
                  return -1;
          }
          strncpy(ipaddrbuf,ipptr,sizeof(ipaddrbuf)-1);
          *ipaddr=ipaddrbuf;
          return 0;
  }

  int iptodir(char **dir,char *ipaddr,char *filename)
  {
          char buffer[BUFSIZE],*bufptr;
          static char dirbuf[BUFSIZE];
          FILE *fp;

          if (!(fp=fopen(filename,"r")))
          {
                  logit("iptodir: fopen failed: %m");
                  return -1;
          }
          *dir=NULL;
          while(fgets(buffer,BUFSIZE,fp))
          {
                  buffer[strlen(buffer)-1]=0;
                  if (*buffer=='#' || *buffer==0)
                          continue;
                  if (!(bufptr=strchr(buffer,' ')))
                  {
                          logit("iptodir: strchr failed");
                          return -1;
                  }
                  *bufptr++=0;
                  if (!strcmp(buffer,ipaddr))
                  {
                          strncpy(dirbuf,bufptr,sizeof(dirbuf)-1);
                          *dir=dirbuf;
                          break;
                  }
          }
          if (fclose(fp)==EOF)
          {
                  logit("iptodir: fclose failed: %m");
                  return -1;
          }
          if (!*dir)
          {
                  logit("iptodir: ip not found in conf file");
                  return -1;
          }
          return 0;
  }
  ______________________________________________________________________

  4.  zXNvg(Virt scripts)

  4.1.  virtfs

  ehC͂ꂼ̃fBNg\Ă܂B chroot g
  ̂ŃVFACu(shared libraries), oCi, conf t@C
   dRs[KvɂȂ܂B҂͊ehCp
  /virtual/domain.comAꂼɃRs[ĎgĂ܂B̂
  ̃fBXNXy[Xg܂V}Vlbg[NJ[hw
  ͈ł傤BfBXNXy[Xߖ񂵂̂Ȃ炻ꂼ
  ̃t@CNΊԂɍ܂ (󒍁F̃N̓V{bN
  Nł͂܂)B

  virtfsXNvg̗܂B

  ______________________________________________________________________
  #!/bin/bash

  echo '$Revision: 1.2 $'

  echo -n "Enter the domain name: "
  read domain

  if [ "$domain" = "" ]
  then
          echo Nothing entered: aborting
          exit 0
  fi

  leadingdir=/virtual

  echo -n "Enter leading dir: (Enter for default: $leadingdir): "
  read ans

  if [ "$ans" != "" ]
  then
          leadingdir=$ans
  fi

  newdir=$leadingdir/$domain

  if [ -d "$newdir" ]
  then
          echo New directory: $newdir: ALREADY exists
          exit 0
  else
          echo New directory: $newdir
  fi

  echo Create $newdir
  mkdir -p $newdir

  echo Create bin
  cp -pdR /bin $newdir

  echo Create dev
  cp -pdR /dev $newdir

  echo Create dev/log
  ln -f /virtual/log $newdir/dev/log

  echo Create etc
  mkdir -p $newdir/etc
  for i in /etc/*
  do
          if [ -d "$i" ]
          then
                  continue
          fi
          cp -pd $i $newdir/etc
  done

  echo Create etc/skel
  mkdir -p $newdir/etc/skel

  echo Create home
  for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
  #   (󒍁F[a-z]͂ꂼݒ肷郆[U[ɕύX܂)
  do
          mkdir -p $newdir/home/$i
  done
  echo Create home/c/crc
  mkdir -p $newdir/home/c/crc
  chown crc.users $newdir/home/c/crc
  #  (󒍁Fݒ肵[U[ɍ킹ĕύXĉ)

  echo Create lib
  mkdir -p $newdir/lib
  for i in /lib/*
  do
          if [ -d "$i" ]
          then
                  continue
          fi
          cp -pd $i $newdir/lib
  done

  echo Create proc
  mkdir -p $newdir/proc

  echo Create sbin
  cp -pdR /sbin $newdir

  echo Create tmp
  mkdir -p -m 0777 $newdir/tmp
  chmod +t $newdir/tmp

  echo Create usr
  mkdir -p $newdir/usr

  echo Create usr/bin
  cp -pdR /usr/bin $newdir/usr

  echo Create usr/lib
  mkdir -p $newdir/usr/lib

  echo Create usr/lib/locale
  cp -pdR /usr/lib/locale $newdir/usr/lib
  #       (󒍁F̃fBNgKɕύX܂)

  echo Create usr/lib/terminfo
  cp -pdR /usr/lib/terminfo $newdir/usr/lib

  echo Create usr/lib/zoneinfo
  cp -pdR /usr/lib/zoneinfo $newdir/usr/lib

  echo Create usr/lib/\*.so\*
  cp -pdR /usr/lib/*.so* $newdir/usr/lib

  echo Create usr/sbin
  cp -pdR /usr/sbin $newdir/usr

  echo Linking usr/tmp
  ln -s /tmp $newdir/usr/tmp

  echo Create var
  mkdir -p $newdir/var

  echo Create var/lock
  cp -pdR /var/lock $newdir/var

  echo Create var/log
  mkdir -p $newdir/var/log

  echo Create var/log/wtmp
  cp /dev/null $newdir/var/log/wtmp

  echo Create var/run
  cp -pdR /var/run $newdir/var

  echo Create var/run/utmp
  cp /dev/null $newdir/var/run/utmp

  echo Create var/spool
  cp -pdR /var/spool $newdir/var

  echo Linking var/tmp
  ln -s /tmp $newdir/var/tmp

  echo Create var/www/html
  mkdir -p $newdir/var/www/html
  chown webmast.www $newdir/var/www/html
  #  (󒍁FchownKɕύXĂĉBȉl)
  chmod g+s $newdir/var/www/html

  echo Create var/www/master
  mkdir -p $newdir/var/www/master
  chown webmast.www $newdir/var/www/master

  echo Create var/www/server
  mkdir -p $newdir/var/www/server
  chown webmast.www $newdir/var/www/server

  exit 0
  ______________________________________________________________________

  4.2.  virtexec

  zŃR}hsɂ͂̃fBNg chroot Ăs
  ܂BŃR}h𑀍삷virtexecĂяoVFXNvg
  ܂B (󒍁Fȉ̃R[h؂/usr/binfBNgɃRs[
  ܂B̕ύX(chmod +x)Ăĉ)B

  ______________________________________________________________________
  #!/bin/sh

  echo '$Revision: 1.2 $'

  BNAME=`basename $0`
  FIRST4CHAR=`echo $BNAME | cut -c1-4`
  REALBNAME=`echo $BNAME | cut -c5-`

  if [ "$BNAME" = "virtexec" ]
  then
          echo Cannot run virtexec directly: NEED a symlink
          exit 0
  fi

  if [ "$FIRST4CHAR" != "virt" ]
  then
          echo Symlink not a virt function
          exit 0
  fi

  list=""
  num=1
  for i in /virtual/*
  do
          if [ ! -d "$i" ]
          then
                  continue
          fi
          if [ "$i" = "/virtual/lost+found" ]
          then
                  continue
          fi
          list="$list $i $num"
          num=`expr $num + 1`
  done

  if [ "$list" = "" ]
  then
          echo No virtual environments exist
          exit 0
  fi

  dialog --clear --title 'Virtexec' --menu Pick 20 70 12 $list 2> /tmp/menu.$$
  if [ "$?" = "0" ]
  then
          newdir=`cat /tmp/menu.$$`
  else
          newdir=""
  fi
  tput clear
  rm -f /tmp/menu.$$

  echo '$Revision: 1.2 $'

  if [ ! -d "$newdir" ]
  then
          echo New directory: $newdir: NOT EXIST
          exit 0
  else
          echo New directory: $newdir
  fi

  echo bname: $BNAME

  echo realbname: $REALBNAME
  if [ "$*" = "" ]
  then
          echo args: none
  else
          echo args: $*
  fi

  echo Changing to $newdir
  cd $newdir

  echo Running program $REALBNAME

  chroot $newdir $REALBNAME $*

  exit 0
  ______________________________________________________________________

  sɂ͊ẽVXe dialog vOCXg[
  ĂKv܂BӂĂB (󒍁Fdialog = VFXN
  vg_CAO{bNXJR}hłBقƂǂ̃VXeł̓C
  Xg[Ă܂)B virtexecg߂ɃV{bNN͂
  ܂BႦ΁A

  ln -s /usr/bin/virtexec /usr/bin/virtpasswd
  ln -s /usr/bin/virtexec /usr/bin/virtvi
  ln -s /usr/bin/virtexec /usr/bin/virtpico
  ln -s /usr/bin/virtexec /usr/bin/virtemacs
  ln -s /usr/bin/virtexec /usr/bin/virtmailq

  virtviAvirtpasswdAvirtmailqƓ͂΂ꂼviN
  A[U[̃pX[hύXłAzVXẽ[L[
  `FbNł肵܂BKvɉĂƑN͂邱Ƃł
  BvOVFACu(shared library)KvƂƂ
  ͉zt@CVXeɂȂ΂Ȃ܂BoCit@Cl
  zt@CVXeɂȂ΂Ȃ܂B

  4.3.  virtfsvirtexecɊւ钍

  ҂͑SẴXNvg/usr/binɃCXg[Ă܂Bzt@C
  VXeɒuȂ̂/usr/localɒuĂ܂BXNvg̓R
  s[ɊւĂȂɂ^b`Ȃ悤ɂ܂Bzt@CVXeԂł
  ȂƂdvȑSẴt@C͍폜ȂĂ͂܂BႦ
  ΁A҂̃VXeɂsshCXg[Ă܂AvCx[gL
  [ (private key)͂ǂ̉zt@CVXe悤ɂ͂
  ܂Bvirtfssɂꂼ̉zt@CVXe
  vCx[gL[폜Ă܂B (󒍁FsshSecure Shell̂Ƃ
  Bsecure authentication, encryption, encrypted X11 connections,
  encrypted TCP/IP forwarding [gOCvO,K
  ȃA[JCuT[o archives/net/ssh/fBNgȂǂł
  )

  ܂resolv.conf(󒍁F DNSȂ /etc/resolv.conf) ύX̃h
  Ct@C͑SĈړĂ܂BႦ /etc/hosts 
  /etc/HOSTNAMEȂǂłB

  virtexecɃV{bNN͂ĂvO

  o  virtpasswd -- pX[hύX

  o  virtadduser -- [U[ǉ

  o  virtdeluser -- [U[폜

  o  virtsmbstatus -- samba status

  o  virtvi -- t@C̕ҏW

  o  virtmailq -- mailq̃`FbN

  o  virtnewaliases -- GCAXe[uč\z

     łB

  5.  DNS

  DNS͕ʂɐݒł܂B̃VXe̗ǂ_́ASẴT[rXɂ
  ă}V(͈ɂ炸)킩Ă邩̂悤ɐUƂ
  ƂłB DNSɊւHOWTO DNS QƂĂB

  6.  Syslog

  6.1.  _

  syslogUNIXVXeŋʂĎgVXeO[eBeBłB
  (󒍁Fsyslog=J[l(kernel)̃bZ[WEOEobt@[ǂ
  (clear)肷)B syslogFIFO(First In First Out)ƌĂ΂
  XyVt@CJf[łBFIFO̓pCv(pipe)ɎXyV
  t@CłB syslogf[̓[hTCh̃f[^҂AC
  gTChɏނ߂ C֐܂BC֐ŃvO
  Ώo͂syslogɓ܂B

   chroot gĂāAFIFO /dev/log͉zɂ݂͑ȂƂ
  ӂĉB͑SẲzsyslogւ̋L^łȂƂ
  ƂӖĂ܂BvO͐V̂̑Ƃ/dev/log
  gȂ̂ŁAt@CPɃRs[邱Ƃł܂B

  syslog̓̃o[Wɂudp\PbgFIFȎɎgĂ
  ܂A͈ʓIȂƂł͂܂B

  6.2.  @

  sysloǵAR}hCŎw肷΁AقȂFIFOT܂BႦΈȉ
  ̂悤ɂ܂B

  syslog -p /virtual/log

  /dev/log/virtual/logɃN͂܂(V{bNN)B

  ln -sf /virtual/log /dev/log

  Ɉȉ̂悤ɂẴt@CɑSĂ/dev/logN܂ (
  ̓n[hNŃV{bNNł͂ȂƂɒ)B

  ln /virtual/log /virtual/domain.com/dev/log

  LvirtfsXNvgł͂łɂsĂ܂B/virtual͈̘A
  fBXNɂA/dev/log̓NĂ̂œinode ԍ
  f[^wƂɂȂ܂Bchroot͂XgbvłȂ̂őS
  ̉z/dev/log͋@\܂BS̃bZ[W͈̏ꏊɋL^
  ܂BvOȂAꂼlog t@C𕪂
  Ƃꍇ͈ȉ̂悤ɂĕʁXsysloggƂł܂B

  syslog -p /virtual/domain1.com/dev/log
  syslog -p /virtual/domain2.com/dev/log

  Ƃ邱Ƃ̓vZXID̘QȂ̂ł߂܂B̃o[
  Wsyslog.init́AsK؂Ȑݒ肪Ăꍇɂ͋Nxɖ
   /dev/log ɍăNĂ܂܂BȉACsyslog.initt@C
  Ă܂B

  ______________________________________________________________________
  #!/bin/sh

  # Source function library.
  . /etc/rc.d/init.d/functions

  case "$1" in
    start)
          echo -n "Starting dev log: "
          ln -sf /virtual/log /dev/log
          echo done
          echo -n "Starting system loggers: "
          daemon syslogd -p /virtual/log
          daemon klogd
          echo
          echo -n "Starting virtual dev log: "
          for i in /virtual/*
          do
                  if [ ! -d "$i" ]
                  then
                          continue
                  fi
                  if [ "$i" = "/virtual/lost+found" ]
                  then
                          continue
                  fi
                  ln -f /virtual/log $i/dev/log
                  echo -n "."
          done
          echo " done"
          touch /var/lock/subsys/syslog
          ;;
    stop)
          echo -n "Shutting down system loggers: "
          killproc syslogd
          killproc klogd
          echo
          rm -f /var/lock/subsys/syslog
          ;;
    *)
          echo "Usage: syslog {start|stop}"
          exit 1
  esac

  exit 0
  ______________________________________________________________________

  ̃fBXNɑSẲzt@CVXeuȂĂ悢Ƃɒ
  ĉBƂfBXNɉzt@CVXeep[eB
  VpsyslogsȂ΂ȂȂł傤B

  7.  zFTP

  Wu-ftpdzĎg悤ɐݒł܂(󒍁FuVirtual-wu-ftpdv
  (g KY)oĂ̂łQƂĉ)BehC
  ŃpX[ht@C킯Ԃɂ͂ł܂BႦ΂
   bob@domain1.com  bob@domain2.com ̗AJEgKvƂ
  Aǂ炩bob2Ƃ肵܂B܂ႤOɂKv
  BehC̉zt@CVXeԂȂ̂ŃpX[ht@C
  킯Ă܂΂̖͉܂BvirtnewuserXNvg
  virtpasswdXNvgɏ悤ȕ@ōĐݒ肵ĂB
  zt@CVXeɂĊezŉe󂯂邱ƂȂanonymous
  ftp sƂł܂B

  inetd.confwu-ftpGg܂B

  ftp stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.ftp wu.ftpd -l -a

  8.  zWeb

  Apache͂ꎩgŉzhCT|[gĂ܂BzhC
  JjYgƂ𒘎҂ĂvOłBinetdʂĉ
  s鎞̓RXg܂B̏ꍇAvO͎s閈ɃX
  ^[g˂΂Ȃ܂B܂webT[rXɂ͕sȒxł
  ƂӖĂ܂B Apache͑̃ANZX̐ڑ~
  ߂郁JjYĂ܂B

  inetdʂApachegꍇinetd.conft@CɈȉ̍sǉ
  ĂB

  www stream tcp nowait www /usr/bin/virtuald \
          virtuald /virtual/conf.www httpd -f /var/www/conf/httpd.conf

   /var/www/conf/httpd.conft@C(󒍁Fɂ
  httpd.confꏊ͈Ⴂ܂)Ɉȉ̂悤ɖL܂B

  ServerType inetd

  ftHgł"standalone"ݒ肵Ă܂BƂ̓VOhC
  gĂƓ悤ApacheT[o̐ݒ܂B

  Ă鎞_ł͉zweb HOWTO͂܂ (󒍁F
  uVirtual-Web-HOWTOv݂͏oĂ܂)BꂪoĂ邾낤
  v܂B₪Ă͂HOWTOQƂĂɏƎv܂B܂
  oĂAvoėApachezzXg̐ݒ@ɂĂ̏͂
  łB

  9.  zIMail/Pop

  9.1.  Qmail ̒ӓ_

  ̏͂sendmail݂̂ɊւełBqmail̏͂HOWTO̎̃o[W
  Œǉ܂(󒍁FQmailɊւ}jÁuQmail+MHvȂǂoĂ
  )B

  9.2.  

  ݁Az[̃T|[gɊւv͂܂܂Ă
  BSendmail͉z[T|[gƌĂ܂A̓e͈ق
  hC̃[荞݂̂Ƃ̂悤łB[ǂɃtH
  [hƂƂł܂B[J}VɃtH[h
  bob@domain1.comAbob@domain2.comɃ[ꍇȂǂł͓[
  tH_ɂ܂Ă܂ł傤B bob̃[ۂ͈Ⴄl
  ŒgႤ̂łB

  9.3.  @

  [U[ɔԍǉ(Ⴆbob1, bob2Ȃ)Aɕ
  dom1bob, dom2bobɂ肷邱Ƃɂă[U[̈Ӑ(unique)ۏ
  邱Ƃ͂ł܂B𗠂ŕϊ悤 mailpop nbN(hack)
  邱Ƃł܂(messy)@łBoẴ[܂o[
  i[(wb_)maindomain.comĂĊeTuhC̃[o[i[
  ̂ɂ̂łB

  9.4.  ǂ@

  ezt@CVXeɊehCp/etc/passwdpӂĂ܂B
  bob@domain1.combob@domain2.comAʁX /etc/passwd̈Ⴄ[
  U[łA[̃gu͂ȂƂƂɂȂ܂B̃[U[B
  ɂ͎pspoolfBNgpӂĂāAezt@CVXe
  ̃[tH_݂͌ɈႤ̂ł邱ƂɂȂ܂B

  Asendmail͂Ƃ\[XR[h̏CKvłB
  sendmail/etc/sendmail.cwƌĂ΂t@CĂ܂B
  sendmail̃zXgɓ]ȂŃ[JɔzSẴzXg
  ܂łt@CłB

  sendmail̓}V̑SfoCX̓`FbNA[JIPł̃Xg
  邽߂ɍs܂B}V̉zhCԂŃ[
  ꍇA肪oĂĂ܂܂Bsendmailɂ͑̉zhC[
  JAhXłA[[JɃXv[Ƃl͂Ȃ̂
  B

  Ⴆbob@domain1.comfred@domain2.comɃ[𑗂Ƃ
  Bdomain1.comsendmaildomain2.com[JłƔf
  domain1.comɃ[Xv[Ă܂AʂƂ domain2.comɃ
  [͂Ƃ͂܂BsendmailCĂ܂(
  v8.8.5sendmailłsAɖ͂܂
  )Bsrc/main.c494sӂҏW܂B sendmail̃\[X͓KȃTC
  gfBXgr[VCDROMł܂B

  vi v8.8.5/src/main.c # Approximately Line 493

  ƂāA

  load_if_names();

  Ƃӏ

  /* load_if_names(); Commented out since hurts virtual */

  ƃRgAEgĂ܂܂(󒍁F̊֐̓C^[tF[X̑
  ƒǉ̏ꏊ߂֐conf.c line 4399ɂ̊֐̂
  BIPXg̃XLȂǂsĂ܂)BzhCԂ̃[
  MKvȂ炱sł悢ƂɒӂĉB

  ͉ꂽ̂łAC̃C[TlbgfoCXeth0͍폜
  ܂BŁA}V̉zIPeth0IPɃ[𑗂
  ̓[Jɑ܂B҂̓_~[IPvirtual1.domain.com
  (10.10.10.157)ƂĎgĂ܂B̃zXgɂ̓[𑗂Ȃ̂ł
  ̉zhC܂B̓VXevǂ`FbN
  ߂ sshŃOC鎞ɎgIPł܂B

  /etc/sendmail.cw̕ҏW

  vi /etc/sendmail.cw
  mail.domain1.com
  domain1.com
  domain1
  localhost

  m4g/etc/sendmail.cfDȂ悤ɍ܂B҂͈ȉ̂悤Ȃ
  ̂g܂B

  divert(0)dnl
  VERSIONID(`@(#)tcpproto.mc      8.5 (Berkeley) 3/23/96')
  OSTYPE(linux)
  FEATURE(redirect)
  FEATURE(always_add_domain)
  FEATURE(use_cw_file)
  FEATURE(local_procmail)
  MAILER(local)
  MAILER(smtp)

  (󒍁Fm4UNIX}NvZbTŁAẴVXeɓĂ܂B
  ŐVo[Wftp://prep.ai.mit.edu/pub/gnu/ł܂Bm4
  linux.mc > /etc/sendmail.cfȂǂƂĎg܂B m4̗
  /usr/lib/m4-exampleɂ܂BIvVm4 --help Œׂĉ)

  /etc/sendmail.cfzhC悤ɕҏWB

  vi /etc/sendmail.cf # 86sӂҏW

  #  my official SMTP hostname (defined automatically)
  #Dj$w.Foo.COM
  Ƃӏ̂ŁA

  #  my official SMTP hostname (defined automatically)
  Djdomain1.com
  ƂĂ܂B

  sendmail͂ꎩgł͂̃T[rXn߂邱ƂłAinetdʂ
  NKv܂B͖ɗƂłȂNԂxĂ
  邾ł傤Bǎ҂ȃTCgǗĂȂ牼z}Vɑ
  hCLׂł͂Ȃ܂B

   -bd tOtċN邱Ƃ͌ĂȂŉB (󒍁F̃t
  Osendmailf[ƂċNIvVłB킵
  man sendmailĉ)B܂ehCŔzĂȂ[𑗂
  o(queue up)邽߂ sendmail -qƎsKv邱Ƃɒӂ
  B

  #!/bin/sh

  # Source function library.
  . /etc/rc.d/init.d/functions

  case "$1" in
    start)
          echo -n "Starting sendmail: "
          daemon sendmail -q1h
          echo
          echo -n "Starting virtual sendmail: "
          for i in /virtual/*
          do
                  if [ ! -d "$i" ]
                  then
                          continue
                  fi
                  if [ "$i" = "/virtual/lost+found" ]
                  then
                          continue
                  fi
                  chroot $i sendmail -q1h
                  echo -n "."
          done
          echo " done"
          touch /var/lock/subsys/sendmail
          ;;
    stop)
          echo -n "Stopping sendmail: "
          killproc sendmail
          echo
          rm -f /var/lock/subsys/sendmail
          ;;
    *)
          echo "Usage: sendmail {start|stop}"
          exit 1
  esac

  exit 0

  pop͓ɉɃCXg[Ă܂܂Bvirtuald̃p[gǉ
   inetd̃Gg[邱ƂKvłBsendmailpopɊւ
  inetd.conf̃GǵA

  pop-3 stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.pop in.qpop -s
  smtp stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.mail sendmail -bs

  ƂȂ܂B

  10.  ̑zIɂł邱

  ̃T[rX悤Ȏ菇łB

  o  zt@CVXeɃoCiACut@Cǉ

  o  /etc/inetd.conf̒ǉ

  o  /virtual/conf.service

  o  KvɉĉzXNvgҏW

     sambapbP[WEudoragẲzpoppassdĂ݂܂Bǂ
     Ȃ삵Ă܂BƋΉzsambãCX
     g[@ɂĂ݂̏͂ƍlĂ܂B

  11.  ܂Ƃ

  ȏオKvȍƂłB̕ɂĐlтƂ̑OȔɏo邱
  Ƃ҂Ă܂BA Computer Resource Center ܂ł肢
  B^ȓ_hLg̃Abvf[gȂǂ܂狳ĉ
  BHOWTOɒǉƎv܂B

  12.  FAQ

  Q1.    ǂĂFAQɂĎ₪Ȃ̂łH

  A1.    ܂₵ĂȂłB

  (󒍁Fȏケ܂ł)

  13.  ƃ

  13.1.  virtfsɂ

  s

  Enter the domain name: domain.com
  Enter leading dir: (Enter for default: /virtual):

  ƕ܂Bꂼ͂ĉB̗ł͈ȉ̂悤ȃfBNg
  AKȃt@Cꂼ̃fBNgɃRs[܂B

  /virtual/domain.com/
              |- bin
              |- dev
              |- etc
              |- home
              |- lib
              |- proc
              |- sbin
              |- tmp
              |- usr
              |- var
              \-log

  13.2.  ̑̃G[

  13.2.1.  /var/log/syslog:

  Dec 22 23:28:46 kaien virtuald[298]: Virtuald Starting: $Revision: 1.2 $
  Dec 22 23:28:46 kaien virtuald[298]: getipaddr: getsockname failed:
                                       Socket opera
  Dec 22 23:28:46 kaien virtuald[298]: getipaddr failed

  ======> ip-aliasݒ肳Ă܂B

  Dec 23 00:30:26 kaien virtuald[1132]: Virtuald Starting: $Revision: 1.2 $
  Dec 23 00:30:26 kaien virtuald[1132]: Incoming ip: 192.168.1.1
  Dec 23 00:30:26 kaien virtuald[1132]: iptodir: fopen failed: No such
  file or dir
  Dec 23 00:30:26 kaien virtuald[1132]: iptodir failed

  ======>  /etc/initd.confɐݒ肵conft@C܂B

  13.2.2.  FTP

  ftp  /virtual/etc/passwdŐݒ肵[U[loginł܂B

  F

  Connected to 192.168.1.4. <=== IP-alias address
  220 kaien FTP server (Version wu-2.4(1) Tue Dec 5 20:51:15 CST 1995) ready.
  Name (192.168.1.4:apple): 331 Password required for hogehoge
  230-No directory! Logging in with home=/
             ===>͂܂ /virtual/home/hogehogeĂȂB
  230 User hogehoge logged in.
  Remote system type is UNIX.
  Using binary mode to transfer files.
  ftp> 221 Goodbye.

  13.2.3.  Mail

  13.2.4.  Web

  [ F    ɍ  N (isaji@mxu.meshnet.or.jp)

  Z F     PÂ  (fujiwara@cim.pe.u-tokyo.ac.jp) ]

