LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2079|回复: 11

关于boa.conf的问题

[复制链接]
发表于 2007-8-31 16:53:36 | 显示全部楼层 |阅读模式
编译uclinux的boa时,总是出现“cp: stat 'boa.conf'失败 没有那个文件或目录”
已查找很多相关资料,以为是路径问题,但修改之后,仍是这样,比如,我把
boa.conf 拷贝到/home下,一编译该boa.conf就不见了,出现“cp: stat 'boa.conf'失败
没有那个文件或目录”,太奇怪了,希望你们能帮帮我。
发表于 2007-8-31 17:29:00 | 显示全部楼层
你仅仅是编译boa吗?

把boa的Makefile贴出来吧.
回复 支持 反对

使用道具 举报

发表于 2007-8-31 17:35:40 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-1 09:22:34 | 显示全部楼层
编译uclinux自带的boa。
boa.conf修改如下:
Port 80
User 0
Group 0
ErrorLog /home/log/boa/error_log
AccessLog /home/log/boa/access_log
RefererLog /home/log/boa/referer_log
AgentLog /home/log/boa/agent_log
DocumentRoot /home/httpd
UserDir public_html
DirectoryIndex index.html
KeepAliveMax 1000
KeepAliveTimeout 10
MimeTypes /home/mime.types
DefaultType text/html
AddType application/x-httpd-cgi cgi
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
修改uClinux-dist/user/boa/src/defines.h中的SERVER_ROOT为#define SERVER_ROOT "/home"以确定web

服务器的根目录.并把修改后的boa.conf和mime.types复制到该根目录下.
修改uClinux-dist/vendors/samsung/44b0/inittab为#boa:unknown:/bin/boa -c /home
修改uClinux-dist/vendors/samsung/44b0/makefile创建所需的目录如home/httpd home/httpd/cgi-bin

home/log/boa
开始编译,make menuconfig, make user_only, make romfs时终端显示部分如下:
romfs-inst.sh -s /var/tmp /tmp
romfs-inst.sh -s /bin /sbin
romfs-inst.sh /etc/rc
romfs-inst.sh /etc/inittab
romfs-inst.sh ../../Generic/romfs/etc/services /etc/services
case "linux-2.4.x" in \
*2.4.*) ;; \
*) echo "#ttyS0:linux:/bin/sh" >> /home/lj/学习/uClinux-dist原/romfs/etc/inittab ;; \
esac
romfs-inst.sh /etc/motd
romfs-inst.sh /home/boa.conf
cp: stat‘boa.conf’失败: 没有那个文件或目录
romfs-inst.sh index.html /home/httpd/index.html
romfs-inst.sh /etc/passwd
同时发现复制到home下的boa.conf没了,费解!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-1 09:24:08 | 显示全部楼层
boa下的makefile如下:
.EXPORT_ALL_VARIABLES:
DIRS = src
all romfs:
        for i in $(DIRS) ; do make -C $$i $@ || exit $?; done
clean:
        for i in $(DIRS) ; do make -C $$i clean ; done

boa/src下的makefile如下:
EXEC = boa
OBJS = alias.o auth.o boa.o cgi.o cgi_header.o config.o get.o hash.o \
        globals.o \
        log.o nls.o pipe.o queue.o read.o request.o response.o signals.o \
        timestamp.o util.o
FLTFLAGS += -s 8192
EXTRALIBS = $(LIBCRYPT)
ifeq ($(CONFIG_PRODUCT),AmazonSME550)
CFLAGS += -DCONFIG_AMAZON
endif
ifdef CONFIG_USER_BOA_WITH_SSL
CFLAGS += $(INCSSL) -DSERVER_SSL=1
EXTRALIBS += $(LIBSSL) $(LIBCRYPTO)
endif
ifdef CONFIG_USER_TINYLOGIN_SHADOWPASSWDS
CFLAGS += -DSHADOW_AUTH
endif
ifdef CONFIG_USER_FLATFSD_FLATFSD
CFLAGS += -DCONFIG_USER_FLATFSD_FLATFSD=1
endif
ifdef CONFIG_USER_OLD_PASSWORDS
CFLAGS += -DOLD_CONFIG_PASSWORDS
endif
ifdef CONFIG_PROP_AMAZON_BOA_LDAP
CFLAGS += -DLDAP_HACK $(INCLDAP) $(INCSG)
EXTRALIBS += -lldap -llber -static $(LIBSNAPGEAR)
endif
all: $(EXEC)
$(EXEC): $(OBJS)
        $(CC) $(LDFLAGS) -o $@ $(OBJS) $(EXTRALIBS) $(LDLIBS)
romfs:
        $(ROMFSINST) /bin/$(EXEC)
clean:
        -rm -f $(EXEC) *.gdb *.elf *.o
boa
回复 支持 反对

使用道具 举报

发表于 2007-9-1 09:57:06 | 显示全部楼层
你把make menuconfig, make user_only, make romfs,这几步分开做, 先做前面两步, 在做第三步make romfs之前看一下你的文件还在不在?

另外把脚本romfs-inst.sh 贴出来.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-1 11:06:06 | 显示全部楼层
#!/bin/sh
#
# A tool to simplify Makefiles that need to put something
# into the ROMFS
#
# Copyright (C) David McCullough, 2002,2003
#
#############################################################################
# Provide a default PATH setting to avoid potential problems...
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/binPATH"
usage()
{
cat << !EOF >&2
$0: [options] [src] dst
    -v          : output actions performed.
    -e env-var  : only take action if env-var is set to "y".
    -o option   : only take action if option is set to "y".
    -p perms    : chmod style permissions for dst.
    -a text     : append text to dst.
        -A pattern  : only append text if pattern doesn't exist in file
    -l link     : dst is a link to 'link'.
    -s sym-link : dst is a sym-link to 'sym-link'.
    if "src" is not provided,  basename is run on dst to determine the
    source in the current directory.
        multiple -e and -o options are ANDed together.  To achieve an OR affect
        use a single -e/-o with 1 or more y/n/"" chars in the condition.
        if src is a directory,  everything in it is copied recursively to dst
        with special files removed (currently CVS dirs).
!EOF
        exit 1
}
#############################################################################
setperm()
{
        if [ "$perm" ]
        then
                [ "$v" ] && echo "chmod ${perm} ${ROMFSDIR}${dst}"
                chmod ${perm} ${ROMFSDIR}${dst}
        fi
}
#############################################################################
file_copy()
{
        if [ -d "${src}" ]
        then
                [ "$v" ] && echo "CopyDir ${src} ${ROMFSDIR}${dst}"
                (
                        cd ${src}
                        V=
                        [ "$v" ] && V=v
                        find . -print | grep -E -v '/CVS' | cpio -p${V}dumL ${ROMFSDIR}

${dst}
                )
        else
                rm -f ${ROMFSDIR}${dst}
                [ "$v" ] && echo "cp ${src} ${ROMFSDIR}${dst}"
                cp ${src} ${ROMFSDIR}${dst}
                setperm ${ROMFSDIR}${dst}
        fi
}
#############################################################################
file_append()
{
        touch ${ROMFSDIR}${dst}
        if [ -z "${pattern}" ] && grep -F "${src}" ${ROMFSDIR}${dst} > /dev/null
        then
                [ "$v" ] && echo "File entry already installed."
        elif [ "${pattern}" ] && egrep "${pattern}" ${ROMFSDIR}${dst} > /dev/null
        then
                [ "$v" ] && echo "File pattern already installed."
        else
                [ "$v" ] && echo "Installing entry into ${ROMFSDIR}${dst}."
                echo "${src}" >> ${ROMFSDIR}${dst}
        fi
        setperm ${ROMFSDIR}${dst}
}
#############################################################################
hard_link()
{
        rm -f ${ROMFSDIR}${dst}
        [ "$v" ] && echo "ln ${src} ${ROMFSDIR}${dst}"
        ln ${src} ${ROMFSDIR}${dst}
}
#############################################################################
sym_link()
{
        rm -f ${ROMFSDIR}${dst}
        [ "$v" ] && echo "ln -s ${src} ${ROMFSDIR}${dst}"
        ln -s ${src} ${ROMFSDIR}${dst}
}
#############################################################################
#
# main program entry point
#
if [ -z "$ROMFSDIR" ]
then
        echo "ROMFSDIR is not set" >&2
        usage
        exit 1
fi
v=
option=y
pattern=
perm=
func=file_copy
src=
dst=
while getopts 've:A:p:a:l:s:' opt "$@"
do
        case "$opt" in
        v) v="1";                           ;;
        o) option="$OPTARG";                ;;
        e) eval option=\"\$$OPTARG\";       ;;
        p) perm="$OPTARG";                  ;;
        a) src="$OPTARG"; func=file_append; ;;
        A) pattern="$OPTARG";               ;;
        l) src="$OPTARG"; func=hard_link;   ;;
        s) src="$OPTARG"; func=sym_link;    ;;
        *)  break ;;
        esac
#
#       process option here to get an ANDing effect
#
        case "$option" in
        *[yY]*) # this gives OR effect, ie., nYn
                ;;
        *)
                [ "$v" ] && echo "Condition not satisfied."
                exit 0
                ;;
        esac
done
shift `expr $OPTIND - 1`
case $# in
1)
        dst="$1"
        if [ -z "$src" ]
        then
                src="`basename $dst`"
        fi
        ;;
2)
        if [ ! -z "$src" ]
        then
                echo "Source file already provided" >&2
                exit 1
        fi
        src="$1"
        dst="$2"
        ;;
*)
        usage
        ;;
esac
$func
exit 0
回复 支持 反对

使用道具 举报

发表于 2007-9-1 12:55:45 | 显示全部楼层
用代码的方式贴出来吧.

还有,
  1. 你把make menuconfig, make user_only, make romfs,这几步分开做, 先做前面两步, 在做第三步make romfs之前看一下你的文件还在不在?
复制代码

这个做了吗?
回复 支持 反对

使用道具 举报

发表于 2007-9-1 14:06:47 | 显示全部楼层

你的出错应该是在情理之中的.

  1. #!/bin/sh
  2. #
  3. # A tool to simplify Makefiles that need to put something
  4. # into the ROMFS
  5. #
  6. # Copyright (C) David McCullough, 2002,2003
  7. #
  8. #############################################################################
  9. # Provide a default PATH setting to avoid potential problems...
  10. PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:$PATH"
  11. usage()
  12. {
  13.         cat << !EOF >&2
  14.         $0: [options] [src] dst
  15.         -v : output actions performed.
  16.         -e env-var : only take action if env-var is set to "y".
  17.         -o option : only take action if option is set to "y".
  18.         -p perms : chmod style permissions for dst.
  19.         -a text : append text to dst.
  20.         -A pattern : only append text if pattern doesn't exist in file
  21.         -l link : dst is a link to 'link'.
  22.         -s sym-link : dst is a sym-link to 'sym-link'.
  23.         if "src" is not provided, basename is run on dst to determine the
  24.         source in the current directory.
  25.         multiple -e and -o options are ANDed together. To achieve an OR affect
  26.         use a single -e/-o with 1 or more y/n/"" chars in the condition.
  27.         if src is a directory, everything in it is copied recursively to dst
  28.         with special files removed (currently CVS dirs).
  29.         !EOF
  30.         exit 1
  31. }
  32. #############################################################################
  33. setperm()
  34. {
  35.         if [ "$perm" ]
  36.         then
  37.                 [ "$v" ] && echo "chmod ${perm} ${ROMFSDIR}${dst}"
  38.                 chmod ${perm} ${ROMFSDIR}${dst}
  39.         fi
  40. }
  41. #############################################################################
  42. file_copy()
  43. {
  44.         if [ -d "${src}" ]
  45.         then
  46.                 [ "$v" ] && echo "CopyDir ${src} ${ROMFSDIR}${dst}"
  47.                 (
  48.                 cd ${src}
  49.                 V=
  50.                 [ "$v" ] && V=v
  51.                 find . -print | grep -E -v '/CVS' | cpio -p${V}dumL ${ROMFSDIR}
  52.        
  53.                 ${dst}
  54.                 )
  55.         else
  56.                 rm -f ${ROMFSDIR}${dst}
  57.                 [ "$v" ] && echo "cp ${src} ${ROMFSDIR}${dst}"
  58.                 cp ${src} ${ROMFSDIR}${dst}
  59.                 setperm ${ROMFSDIR}${dst}
  60.         fi
  61. }
  62. #############################################################################
  63. file_append()
  64. {
  65.         touch ${ROMFSDIR}${dst}
  66.         if [ -z "${pattern}" ] && grep -F "${src}" ${ROMFSDIR}${dst} > /dev/null
  67.         then
  68.         [ "$v" ] && echo "File entry already installed."
  69.         elif [ "${pattern}" ] && egrep "${pattern}" ${ROMFSDIR}${dst} > /dev/null
  70.         then
  71.         [ "$v" ] && echo "File pattern already installed."
  72.         else
  73.         [ "$v" ] && echo "Installing entry into ${ROMFSDIR}${dst}."
  74.         echo "${src}" >> ${ROMFSDIR}${dst}
  75.         fi
  76.         setperm ${ROMFSDIR}${dst}
  77. }
  78. #############################################################################
  79. hard_link()
  80. {
  81.         rm -f ${ROMFSDIR}${dst}
  82.         [ "$v" ] && echo "ln ${src} ${ROMFSDIR}${dst}"
  83.         ln ${src} ${ROMFSDIR}${dst}
  84. }
  85. #############################################################################
  86. sym_link()
  87. {
  88.         rm -f ${ROMFSDIR}${dst}
  89.         [ "$v" ] && echo "ln -s ${src} ${ROMFSDIR}${dst}"
  90.         ln -s ${src} ${ROMFSDIR}${dst}
  91. }
  92. #############################################################################
  93. #
  94. # main program entry point
  95. #
  96. if [ -z "$ROMFSDIR" ]
  97. then
  98. echo "ROMFSDIR is not set" >&2
  99. usage
  100. exit 1
  101. fi

  102. v=
  103. option=y
  104. pattern=
  105. perm=
  106. func=file_copy
  107. src=
  108. dst=
  109. while getopts 've:A:a:l:s:' opt "$@"
  110. do
  111. case "$opt" in
  112. v) v="1"; ;;
  113. o) option="$OPTARG"; ;;
  114. e) eval option="\$$OPTARG"; ;;
  115. p) perm="$OPTARG"; ;;
  116. a) src="$OPTARG"; func=file_append; ;;
  117. A) pattern="$OPTARG"; ;;
  118. l) src="$OPTARG"; func=hard_link; ;;
  119. s) src="$OPTARG"; func=sym_link; ;;
  120. *) break ;;
  121. esac
  122. #
  123. # process option here to get an ANDing effect
  124. #
  125. case "$option" in
  126. *[yY]*) # this gives OR effect, ie., nYn
  127. ;;
  128. *)
  129. [ "$v" ] && echo "Condition not satisfied."
  130. exit 0
  131. ;;
  132. esac
  133. done
  134. shift `expr $OPTIND - 1`

  135. case $# in
  136. 1)
  137.         dst="$1"
  138.         if [ -z "$src" ]
  139.         then
  140.         src="`basename $dst`"
  141.         fi
  142.         ;;
  143. 2)
  144.         if [ ! -z "$src" ]
  145.         then
  146.         echo "Source file already provided" >&2
  147.         exit 1
  148.         fi
  149.         src="$1"
  150.         dst="$2"
  151.         ;;
  152. *)
  153.         usage
  154.         ;;
  155. esac

  156. $func
  157. exit 0
复制代码


命令
romfs-inst.sh /home/boa.conf
参数只有一个.那么func=file_copy, dst=/home/boa.conf, src=boa.conf
接下来运行到file_copy中,因为src不是一个目录,所以运行else 中的语句.
当执行到 [color="Red"] cp ${src} ${ROMFSDIR}${dst} 这句命令时,
即 cp boa.conf ${ROMFSDIR}/home/boa.conf, 这里我不知道你的$(ROMFSDIR)是多少.
但是这个cp操作执行的是把当前目录,即home/log/boa下的boa.conf拷贝到 ${ROMFSDIR}/home/boa.conf. 而不是你想的, 把/home/boa.conf拷贝到某个地方.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-2 09:16:09 | 显示全部楼层
谢谢,似乎有点明白了,我试试。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表