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, 4.2BSD)"
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 echo
'a: * 0 ${FSTYPE}' >> ${VKDIR}/label.tmp
106 disklabel
-R
`cat ${VKDIR}/vn.which`s1
${VKDIR}/label.tmp
107 disklabel
-B
`cat ${VKDIR}/vn.which`s1
108 ${NEWFS_CMD} ${NEWFS_ARGS} /dev
/`cat ${VKDIR}/vn.which`s1a
109 mkdir
-p
${VKDIR}/root
110 vnconfig
-u
`cat ${VKDIR}/vn.which` > /dev
/null
2>&1
113 vnconfig
-c
-s labels
`cat ${VKDIR}/vn.which` ${VKDIR}/root.img
114 . if
${FSTYPE} == "4.2BSD"
115 fsck
-p
/dev
/`cat ${VKDIR}/vn.which`s1a
117 ${MOUNT_CMD} /dev
/`cat ${VKDIR}/vn.which`s1a
${VKDIR}/root
118 @echo
"Mounted ${VKDIR}/root"
123 vnconfig
-c
-s labels
`cat ${VKDIR}/vn.which` ${VKDIR}/root.img
124 fsck
-y
/dev
/`cat ${VKDIR}/vn.which`s1a
127 # Install a fresh world & distribution, and kernel
131 make
-j
4 DESTDIR
=${VKDIR}/root NO_BACKUP
=TRUE installworld
132 cd
${SRCDIR}/etc
&& \
133 make
-j
4 DESTDIR
=${VKDIR}/root distribution
134 echo
'/dev/vkd0s1a / ufs rw 1 1' > ${VKDIR}/root
/etc
/fstab
135 echo
'proc /proc procfs rw 0 0' >> ${VKDIR}/root
/etc
/fstab
136 echo
'vfs.root.mountfrom="ufs:vkd0s1a"' > ${VKDIR}/root
/boot
/loader.conf
137 #(egrep -v '^console' ${VKDIR}/root/etc/ttys; echo 'console "/usr/libexec/getty Pc" cons25 on secure') > ${VKDIR}/root/etc/ttys.new
138 #mv -f ${VKDIR}/root/etc/ttys.new ${VKDIR}/root/etc/ttys
141 DESTDIR
=${VKDIR}/root KERNCONF
=${USEKERNEL} \
143 cp
${VKDIR}/root
/boot
/kernel
/kernel
${VKDIR}/vkernel
146 echo
'ifconfig_vke0="up"' > ${VKDIR}/root
/etc
/rc.conf
147 echo
'defaultrouter="10.26.0.1"' >> ${VKDIR}/root
/etc
/rc.conf
148 echo
'search dragonflybsd.org backplane.com' > ${VKDIR}/root
/etc
/resolv.conf
149 echo
'nameserver 10.0.0.25' >> ${VKDIR}/root
/etc
/resolv.conf
150 echo
'nameserver 10.0.0.2' >> ${VKDIR}/root
/etc
/resolv.conf
151 echo
'nameserver 8.8.8.8' >> ${VKDIR}/root
/etc
/resolv.conf
153 chmod
644 /build
/vkernel
/root.img
155 # Quick reinstall - just install a new kernel on top of an existing image
160 make
-j
4 DESTDIR
=${VKDIR}/root NO_BACKUP
=TRUE installworld
162 reinstallkernel
: mount
164 make
-j
4 DESTDIR
=${VKDIR}/root KERNCONF
=${USEKERNEL} \
166 cp
${VKDIR}/root
/boot
/kernel
/kernel
${VKDIR}/vkernel
169 cp
/boot
/loader
${VKDIR}/root
/boot
/loader
172 # Run the vkernel on our image. Make sure we are unmounted so
173 # we do not compete against the emulated kernel when writing to root.img.
174 # (check does this for us)
177 mkdir
-p
/var
/vkernel
178 sysctl vm.vkernel_enable
=1
179 cd
${VKDIR} && .
/vkernel
-m
${PHYSMEM} -n
${NCPUS} \
181 -I
/var
/run
/vknet
${EXTRAOPTS}
183 # When running w/ a NFS root
186 NFS_NETMASK?
= 255.255.255.0
187 NFS_ROOT_IP?
= 10.0.0.1
188 NFS_ROOT_PATH?
= /netboot2
191 cd
${VKDIR} && .
/vkernel
-m
${PHYSMEM} -n
${NCPUS} -U
-v \
193 -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}'
195 # Make sure we are not mounted and the VN device is unconfigured,
197 # Find an unused VN device but do not do anything with it yet.
201 @
(echo
"must specify VKDIR=target or as an environment variable"; /usr
/bin
/false
)
205 @echo
"${VKDIR} found"
210 .if
${FSTYPE} == "hammer"
211 NEWFS_CMD
= newfs_
${FSTYPE}
212 NEWFS_ARGS
= -L VKROOT
-f
213 MOUNT_CMD
= mount_
${FSTYPE}
225 .if exists
(${VKDIR}/vn.which
)
226 -umount
${VKDIR}/root
> /dev
/null
2>&1
227 -vnconfig
-u
`cat ${VKDIR}/vn.which` > /dev
/null
2>&1
228 rm -f
${VKDIR}/vn.which
230 (vnconfig
-l | fgrep
"not in use" > /dev
/null
) || \
231 (echo
"Cannot find unused VN"; /usr
/bin
/false
)
232 vnconfig
-l | fgrep
"not in use" | \
233 cut
-f
1 -d
: | head
-1 > ${VKDIR}/vn.which
234 egrep
'^vn' ${VKDIR}/vn.which
> /dev
/null || \
235 (echo
"VN device selection is bad"; /usr
/bin
/false
)