历时两天的JZ2440移植apache_1.3.39血泪史

博主在移植Apache_1.3.39到JZ2440开发板过程中遇到诸多问题,如用户权限、网络配置、库文件缺失、strace调试等。通过解决用户命名错误、添加环境变量、修复libnss库、建立组文件、调整httpd.conf和重新编译等步骤,最终成功运行Apache并访问网页。整个过程耗时两天,充满挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移植环境( 红色粗字体字为修改后内容, 蓝色粗体字为特别注意内容)
1,开发板:韦东山JZ2440。
2,linux 版本:linux-3.4.2

3,参考文献:http://blog.youkuaiyun.com/liangzhuangdongtou/article/details/51942595

按照参考文献的方法上次成功移植了apache1.3.39,前几天把文件系统搞崩了,开始了为期两天的坑爹移植之路。大哭大哭

悲剧的开始:

#/usr/local/apache/bin/httpd -f /usr/local/apache/conf/httpd.conf start

httpd: bad user name nobody

什么情况,于是各种尝试修改/etc/passwd和/etc/group以及addgroup nobody和adduser -g nobody nobody,改来改去,折腾了半天,还是bad user name nobody.真是奇了怪了。

[root@UnixHost ]# ping localhost
ping: bad address 'localhost'
[root@UnixHost ]# 

ping本地回环地址也出现问题,但是ping主机的ip是正常的(开发板和主机通过网线相连)。网上找找资料,改了/etc/hosts文件为如下:

[root@UnixHost etc]# cat hosts
127.0.0.1	localhost
127.0.1.1	book-desktop

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback

再次ping ,还是bad address,网上说是缺少nss的库,于是在交叉编译工具的lib文件夹中找到了libnss相关的*.so文件,拷贝到开发板,再次尝试ping,正常。

[root@UnixHost lib]# tar xzvf libnss.tar.gz
libnss_compat-2.9.so
libnss_compat.so.2
libnss_dns-2.9.so
libnss_dns.so.2
libnss_files-2.9.so
libnss_files.so.2
libnss_hesiod-2.9.so
libnss_hesiod.so.2
libnss_nis-2.9.so
libnss_nisplus-2.9.so
libnss_nisplus.so.2
libnss_nis.so.2

这里注意,拷贝的时候,一定要用以下两个命令进行打包解包,否则会丢失符号链接!!!!

打包命令:tar czvf output.tar.gz input
解包命令:tar xzvf output.tar.gz

这样就能够保留符号链接,拷贝到开发板解包之后能够正常工作。

这样是能够ping通了,但是apache还是一样的报错。

漫长思索中........

根据这篇文章的提示https://www.linuxquestions.org/questions/linux-server-73/httpd-bad-user-name-apache-540565/

把strace 移植到开发板,跟踪httpd的执行过程,果然发现了一些猫腻。

[root@UnixHost lib]# strace /usr/local/apache/bin/httpd -f /usr/local/apache/con
f/httpd.conf start
execve("/usr/local/apache/bin/httpd", ["/usr/local/apache/bin/httpd", "-f", "/usr/local/apache/conf/httpd.con"..., "start"], [/* 13 vars */]) = 0
brk(0)                                  = 0xb1000
uname({sys="Linux", node="UnixHost", ...}) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/lib/tls/v4l/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/v4l/half", 0xbeb31448) = -1 ENOENT (No such file or directory)
open("/lib/tls/v4l/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/v4l", 0xbeb31448)      = -1 ENOENT (No such file or directory)
open("/lib/tls/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/half", 0xbeb31448)     = -1 ENOENT (No such file or directory)
open("/lib/tls/libm.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory)
stat64("/lib/tls", 0xbeb31448)          = -1 ENOENT (No such file or directory)
open("/lib/v4l/half/libm.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/v4l/half", 0xbeb31448)     = -1 ENOENT (No such file or directory)
open("/lib/v4l/libm.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory)
stat64("/lib/v4l", 0xbeb31448)          = -1 ENOENT (No such file or directory)
open("/lib/half/libm.so.6", O_RDONLY)   = -1 ENOENT (No such file or directory)
stat64("/lib/half", 0xbeb31448)         = -1 ENOENT (No such file or directory)
open("/lib/libm.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\3701\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0555, st_size=730551, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f15000
mmap2(NULL, 680104, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e4c000
mprotect(0xb6eea000, 28672, PROT_NONE)  = 0
mmap2(0xb6ef1000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x9d) = 0xb6ef1000
close(3)                                = 0
open("/lib/libcrypt.so.1", O_RDONLY)    = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0t\7\0\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0555, st_size=42059, ...}) = 0
mmap2(NULL, 225608, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6e14000
mprotect(0xb6e1c000, 28672, PROT_NONE)  = 0
mmap2(0xb6e23000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x7) = 0xb6e23000
mmap2(0xb6e25000, 155976, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6e25000
close(3)                                = 0
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\334Q\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0555, st_size=1479594, ...}) = 0
mmap2(NULL, 1212952, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6ceb000
mprotect(0xb6e06000, 32768, PROT_NONE)  = 0
mmap2(0xb6e0e000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x11b) = 0xb6e0e000
mmap2(0xb6e11000, 8728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6e11000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f14000
set_tls(0xb6f144a0, 0xb6f14b77, 0xb6f14b78, 0xb6f144a0, 0xb6f17000) = 0
mprotect(0xb6e0e000, 8192, PROT_READ)   = 0
mprotect(0xb6e23000, 4096, PROT_READ)   = 0
mprotect(0xb6ef1000, 4096, PROT_READ)   = 0
mprotect(0xa8000, 4096, PROT_READ)      = 0
mprotect(0xb6f16000, 4096, PROT_READ)   = 0
brk(0)                                  = 0xb1000
brk(0xd4000)                            = 0xd4000
stat64("/usr/local/apache/bin/suexec", 0xbeb31b38) = -1 ENOENT (No such file or directory)
lstat64("/usr/local/apache/conf/httpd.conf", {st_mode=S_IFREG|0766, st_size=33429, ...}) = 0
open("/usr/local/apache/conf/httpd.conf", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0766, st_size=33429, ...}) = 0
fstat64(3, {st_mode=S_IFREG|0766, st_size=33429, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f13000
read(3, "##\n## httpd.conf -- Apache HTTP "..., 4096) = 4096
stat64("/home/webroot", {st_mode=S_IFDIR|0755, st_size=2048, ...}) = 0
read(3, "r by using \"/dev/null\" (for Unix"..., 4096) = 4096
read(3, " is called. The default is Off.\n"..., 4096) = 4096
socket(PF_FILE, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 4
conn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值