510819776 发表于 2014-10-2 16:59:52

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:24

不错的教程,有时间弄一下试试看

510819776 发表于 2014-10-12 18:41:25

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

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

jie_china 发表于 2014-10-21 22:01:40

高手呀,前排留名

510819776 发表于 2014-11-29 16:29:22

欢迎折腾

mayi 发表于 2020-7-7 20:27:52

太牛了,小白看不懂呀:dizzy::dizzy:
页: [1]
查看完整版本: android手机ipxe-http-nfs启动ubuntu成功