无忧启动论坛

标题: android手机ipxe-http-nfs启动ubuntu成功 [打印本页]

作者: 510819776    时间: 2014-10-2 16:59
标题: android手机ipxe-http-nfs启动ubuntu成功
本帖最后由 510819776 于 2014-10-11 02:53 编辑

在这里发帖做个纪念 免得我忘记了这个过程
1.网络环境
wr720n有线连接台式机  wr720n无线连接android手机
手机显示连接速度72Mbps
2.路由器设置
路由器开启dhcp 192.168.2.100-199服务
正常启动台式机  电脑和手机是局域网 可以相互访问
3.手机方面配置
手机的pxe服务配置
使用armv7a的dnsmasq
dnsmasq.conf配置如下
interface=wlan0
listen-address=0.0.0.0
dhcp-range=192.168.2.0,proxy
enable-tftp
tftp-root=/mnt/sdcard/www/
dhcp-match=ipxe,175
dhcp-option=175,8:1:1
pxe-service=net:#ipxe,x86PC, "splashtop by richud.com", ipxe.kpxe

手机sdcard下面有www目录
www里面必须有ipxe.kpxe.0
启动手机的pxe服务命令 dnsmasq --conf-file=$CONF
手机http配置
使用arm版本的apache http server的httpd
配置文件httpd.conf
ServerRoot "/mnt/sdcard/apache/http"
Listen 0.0.0.0:80
#<IfModule !mpm_netware_module>
#<IfModule !mpm_winnt_module>

User shell
Group root
#ServerAdmin vvvv.1988@163.com
DocumentRoot "/mnt/sdcard/www"
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
<Directory "/mnt/sdcard/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    IndexOptions Charset=UTF-8
    Allow from all
</Directory>
#<IfModule dir_module>
#    DirectoryIndex index.html
#</IfModule>
<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</FilesMatch>
DefaultType text/plain

这里是把sdcard下面www目录设置为http根目录
效果是用电脑访问http://手机ip/
可以看到www下面的文件
本http服务提供ipxe netboot ubuntu的两个内核文件 vmlinuz和initrd.lz
所以www下面必须有从ubuntu的iso中提取的vmlinuz和initrd.lz
http服务的启动命令是
httpd -f /sdcard/apache/httpd.conf
nfs服务配置
使用unfsd3的源码编译unfsd 支持nfs v3共享 无rpcbind 无portmap
exports配置
/sdcard/nfsboot 192.168.2.0/255.255.255.0(ro,insecure,no_root_squash)
ip地址自己修改下
启动nfs服务命令
unfsd -e /sdcard/nfsboot/exports -t -p -m 2049 -s
好了 说下手机sdcard下面的目录和文件吧
nfsboot目录下有ubuntu14.04的iso解压的文件和exports
www目录下有ipxe.kpxe.0 vmlinuz initrd.lz ubuntu.ipxe
apache目录是放的arm版本的apache
ubuntu.ipxe内容
#!ipxe
kernel http://手机ip/vmlinuz boot=casper netboot=nfs nfsroot=手机ip:/sdcard/nfsboot,nolock,mountport=2049,nfsvers=3 locale=zh_CN.UTF-8 quiet splash
initrd http://手机ip/initrd.lz
帖子已经接近完美了
然后电脑打开pxe启动
按ctrl b进入ipxe命令行
输入
dhcp
chain http://手机ip/ubuntu.ipxe
之后就能进入ubuntu 14.04的livecd桌面了
哈哈 失败了 对呀
好了 因为手机的nfs服务器没有portmap
所以不可以直接就这样启动
怎么办
简单  修改下initrd.lz
mv initrd.lz initrd.lzma
lzma -d initrd.lzma
cpio -id<initrd
修改scrips/casper
如下
do_nfsmount() {
    rc=1
    modprobe "${MP_QUIET}" nfs
    if [ -z "${NFSOPTS}" ]; then
        NFSOPTS=""
    else
        NFSOPTS=",${NFSOPTS}"
    fi

    [ "$quiet" != "y" ] && log_begin_msg "Trying mount -t nfs -o ro${NFSOPTS} ${NFSROOT} ${mountpoint}"
    # FIXME: This while loop is an ugly HACK round an nfs bug
    i=0
    while [ "$i" -lt 10 ]; do
        mount -t nfs -o ro,nolock,nfsvers=3,proto=tcp,mountport=2049 "${NFSROOT}" "${mountpoint}" && rc=0 && break
        sleep 1
        i="$(($i + 1))"
    done
    return ${rc}
}
其实就是修改了 原来的nfsmount *********
改好后打包回去
find .|cpio -o -H newc>initrd
lzma -7 initrd
mv initrd.lzma initrd.lz
ok了
内核这样修改后
ubuntu.ipxe就可以直接这样
#!ipxe
kernel http://手机ip/vmlinuz boot=casper netboot=nfs nfsroot=手机ip:/sdcard/nfsboot locale=zh_CN.UTF-8 quiet splash
initrd http://手机ip/initrd.lz

帖子快结束了
我这里要说的是我使用的是基于ubuntu的发行版本linuxmint 17 kde x64位系统
我想ubuntu 14.04应该也是一样的
关于细节方面可以看我的其他帖子 哈哈














已经编译了一个可以用的portmap
这样手机的nfs服务器就不需要 再去修改ubuntu的initrd.lz文件了
关注我的其他帖子
已经发布了一个 集成了nfs http 和pxe的安卓apk












作者: ql1307096    时间: 2014-10-12 09:18
不错的教程,有时间弄一下试试看
作者: 510819776    时间: 2014-10-12 18:41
ql1307096 发表于 2014-10-12 09:18
不错的教程,有时间弄一下试试看

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=342394
软件已经发布 apk的

作者: jie_china    时间: 2014-10-21 22:01
高手呀,前排留名
作者: 510819776    时间: 2014-11-29 16:29
欢迎折腾
作者: mayi    时间: 2020-7-7 20:27
太牛了,小白看不懂呀




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3