1 # Makefile - set up a vkernel environment for testing the vkernel
4 # require it to be specified
5 SRCDIR ?
= ${.CURDIR
}/..
/..
10 MAKE_JOBS?
= $$(sysctl
-n hw.ncpu
)
14 .if
${MACHINE_ARCH} == "x86_64"
18 scratch
: world kernel root
install
19 @echo
"Run the environment with:"
20 @echo
"make VKDIR=${VKDIR} run"
22 quickw
: quickworld quickkernel reinstall reinstallkernel
23 @echo
"Run the environment with:"
24 @echo
"make VKDIR=${VKDIR} run"
26 quick
: quickkernel reinstallkernel
27 @echo
"Run the environment with:"
28 @echo
"make VKDIR=${VKDIR} run"
31 @echo
"Setup Instructions:"
33 @echo
" setenv ROOTSIZE size (optional)"
34 @echo
" setenv VKDIR target_dir"
35 @echo
" setenv FSTYPE fstype (optional. values: hammer, hammer2, ufs)"
36 @echo
" setenv MAKE_JOBS njobs (optional)"
38 @echo
"Meta target components:"
40 @echo
" help - this help"
41 @echo
" clean - clean up"
42 @echo
" scratch - build and install everything from scratch"
43 @echo
" (this is absolutely everything)"
44 @echo
" quick - incremental kernel build & reinstall"
45 @echo
" quickw - incremental world & kernel build & reinstall"
46 @echo
" run - run vkernel with VKDIR/root.img"
47 @echo
" mount - mount VKDIR/root.img at VKDIR/root"
48 @echo
" umount - unmount"
49 @echo
" fsck - fsck VKDIR/root.img"
51 @echo
"Individual target components:"
53 @echo
" world - build the world from scratch"
54 @echo
" root - create a new, empty root.img"
55 @echo
" install - install a world & kernel"
56 @echo
" into root.img"
57 @echo
" leaf - additional customization"
58 @echo
" kernel - build vkernel"
59 @echo
" quickworld - incremental rebuild world"
60 @echo
" quickkernel - incremental rebuild kernel"
61 @echo
" reinstall - reinstall world into root.img"
62 @echo
" (just the installworld piece)"
63 @echo
" reinstallkernel - reinstall kernel into root.img"
66 # Unmount everything, de-configured VN, and clean up.
67 # (check handles umounting/deconfiguring)
70 rm -rf
${VKDIR}/root.img
${VKDIR}/root
72 # Build the world and kernel
76 cd
${SRCDIR} && make
-j
${MAKE_JOBS} buildworld
79 cd
${SRCDIR} && make
-j
${MAKE_JOBS} KERNCONF
=${USEKERNEL} buildkernel
82 cd
${SRCDIR} && make
-j
${MAKE_JOBS} KERNCONF
=${USEKERNEL} nativekernel
84 # Quick build - just rebuild the kernel quickly
88 cd
${SRCDIR} && make
-j
${MAKE_JOBS} quickworld
91 cd
${SRCDIR} && make
-j
${MAKE_JOBS} KERNCONF
=${USEKERNEL} quickkernel
93 # Build and mount an empty filesystem for the emulated root disk
95 # NOTE: root must umount when done because a later dependency may
96 # have a dependency on mount.
99 vnconfig
-c
-T
-S
${ROOTSIZE} -s labels \
100 `cat ${VKDIR}/vn.which` ${VKDIR}/root.img
101 dd if
=/dev
/zero of
=/dev
/`cat ${VKDIR}/vn.which` bs
=32k count
=4
102 fdisk
-IB
`cat ${VKDIR}/vn.which`
103 disklabel
-r
-w
`cat ${VKDIR}/vn.which`s1 auto
104 disklabel
`cat ${VKDIR}/vn.which`s1
> ${VKDIR}/label.tmp
105 .if
${FSTYPE} == "ufs"
106 echo
'a: * 0 4.2BSD' >> ${VKDIR}/label.tmp
108 echo
'a: * 0 ${FSTYPE}' >> ${VKDIR}/label.tmp
110 disklabel
-R
`cat ${VKDIR}/vn.which`s1
${VKDIR}/label.tmp
111 disklabel
-B
`cat ${VKDIR}/vn.which`s1
112 ${NEWFS_CMD} ${NEWFS_ARGS} /dev
/`cat ${VKDIR}/vn.which`s1a
113 mkdir
-p
${VKDIR}/root
114 vnconfig
-u
`cat ${VKDIR}/vn.which` > /dev
/null
2>&1
117 vnconfig
-c
-s labels
`cat ${VKDIR}/vn.which` ${VKDIR}/root.img
118 . if
${FSTYPE} == "ufs"
119 fsck
-p
/dev
/`cat ${VKDIR}/vn.which`s1a
121 ${MOUNT_CMD} /dev
/`cat ${VKDIR}/vn.which`s1a
${VKDIR}/root
122 @echo
"Mounted ${VKDIR}/root"
127 vnconfig
-c
-s labels
`cat ${VKDIR}/vn.which` ${VKDIR}/root.img
128 fsck
-y
/dev
/`cat ${VKDIR}/vn.which`s1a
131 # Install a fresh world & distribution, and kernel
135 make
-j
4 DESTDIR
=${VKDIR}/root NO_BACKUP
=TRUE installworld
136 cd
${SRCDIR}/etc
&& \
137 make
-j
4 DESTDIR
=${VKDIR}/root distribution
138 .if
${FSTYPE} == "ufs"
139 echo
'/dev/vkd0s1a / ufs rw 1 1' > ${VKDIR}/root
/etc
/fstab
141 echo
'/dev/vkd0s1a / ${FSTYPE} rw 0 0' > ${VKDIR}/root
/etc
/fstab
143 echo
'proc /proc procfs rw 0 0' >> ${VKDIR}/root
/etc
/fstab
144 echo
"vfs.root.mountfrom=\"${FSTYPE}:vkd0s1a\"" > ${VKDIR}/root
/boot
/loader.conf
145 #(egrep -v '^console' ${VKDIR}/root/etc/ttys; echo 'console "/usr/libexec/getty Pc" cons25 on secure') > ${VKDIR}/root/etc/ttys.new
146 #mv -f ${VKDIR}/root/etc/ttys.new ${VKDIR}/root/etc/ttys
149 DESTDIR
=${VKDIR}/root KERNCONF
=${USEKERNEL} \
151 cp
${VKDIR}/root
/boot
/kernel
/kernel
${VKDIR}/vkernel
154 echo
'ifconfig_vke0="up"' > ${VKDIR}/root
/etc
/rc.conf
155 echo
'defaultrouter="10.26.0.1"' >> ${VKDIR}/root
/etc
/rc.conf
156 echo
'search dragonflybsd.org backplane.com' > ${VKDIR}/root
/etc
/resolv.conf
157 echo
'nameserver 10.0.0.25' >> ${VKDIR}/root
/etc
/resolv.conf
158 echo
'nameserver 10.0.0.2' >> ${VKDIR}/root
/etc
/resolv.conf
159 echo
'nameserver 8.8.8.8' >> ${VKDIR}/root
/etc
/resolv.conf
161 chmod
644 /build
/vkernel
/root.img
163 # Quick reinstall - just install a new kernel on top of an existing image
168 make
-j
4 DESTDIR
=${VKDIR}/root NO_BACKUP
=TRUE installworld
170 reinstallkernel
: mount
172 make
-j
4 DESTDIR
=${VKDIR}/root KERNCONF
=${USEKERNEL} \
174 cp
${VKDIR}/root
/boot
/kernel
/kernel
${VKDIR}/vkernel
177 cp
/boot
/loader
${VKDIR}/root
/boot
/loader
180 # Run the vkernel on our image. Make sure we are unmounted so
181 # we do not compete against the emulated kernel when writing to root.img.
182 # (check does this for us)
185 mkdir
-p
/var
/vkernel
186 sysctl vm.vkernel_enable
=1
187 cd
${VKDIR} && .
/vkernel
-m
${PHYSMEM} -n
${NCPUS} \
189 -I
/var
/run
/vknet
${EXTRAOPTS} ${MNTOPTS}
191 # When running w/ a NFS root
194 NFS_NETMASK?
= 255.255.255.0
195 NFS_ROOT_IP?
= 10.0.0.1
196 NFS_ROOT_PATH?
= /netboot2
199 cd
${VKDIR} && .
/vkernel
-m
${PHYSMEM} -n
${NCPUS} -U
-v \
201 -e
'boot.netif.ip=${NFS_IP}:boot.netif.netmask=${NFS_NETMASK}:boot.netif.name=vke0:boot.nfsroot.server=${NFS_ROOT_IP}:boot.nfsroot.path=${NFS_ROOT_PATH}'
203 # Make sure we are not mounted and the VN device is unconfigured,
205 # Find an unused VN device but do not do anything with it yet.
209 @
(echo
"must specify VKDIR=target or as an environment variable"; /usr
/bin
/false
)
213 @echo
"${VKDIR} found"
218 .if
${FSTYPE} == "hammer"
219 NEWFS_CMD
= newfs_
${FSTYPE}
220 NEWFS_ARGS
= -L VKROOT
-f
221 MOUNT_CMD
= mount_
${FSTYPE}
223 MNTOPTS
+= -e vfs.root.mountfrom
=\'${FSTYPE}:vkd0s1a
\'
224 .elif
${FSTYPE} == "hammer2"
225 NEWFS_CMD
= newfs_
${FSTYPE}
227 MOUNT_CMD
= mount_
${FSTYPE}
229 MNTOPTS
+= -e vfs.root.mountfrom
=\'${FSTYPE}:vkd0s1a
\'
230 .elif
${FSTYPE} == "ufs"
236 @
(echo
"\"${FSTYPE}\" is not a valid filesystem"; /usr
/bin
/false
)
238 .if
${FSTYPE} == "hammer" ||
${FSTYPE} == "hammer2"
243 .if exists
(${VKDIR}/vn.which
)
244 -umount
${VKDIR}/root
> /dev
/null
2>&1
245 -vnconfig
-u
`cat ${VKDIR}/vn.which` > /dev
/null
2>&1
246 rm -f
${VKDIR}/vn.which
248 (vnconfig
-l | fgrep
"not in use" > /dev
/null
) || \
249 (echo
"Cannot find unused VN"; /usr
/bin
/false
)
250 vnconfig
-l | fgrep
"not in use" | \
251 cut
-f
1 -d
: | head
-1 > ${VKDIR}/vn.which
252 egrep
'^vn' ${VKDIR}/vn.which
> /dev
/null || \
253 (echo
"VN device selection is bad"; /usr
/bin
/false
)