1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
|
# $NetBSD: evbarm.conf,v 1.41 2022/10/30 15:08:50 jmcneill Exp $
# evbarm shared config
#
image=$HOME/${board}.img
MACHINE=evbarm
extra=48 # spare space
init=32
boot=$((192 - ${init}))
ffsoffset=$(( (${init} + ${boot}) / 2 ))m
size=0 # autocompute
msdosid=12
if $gpt; then
partition_type="gpt"
else
partition_type="disklabel"
fi
mkdir -p ${mnt}/boot
make_label_evbarm() {
# compute all sizes in terms of sectors
local totalsize=$(( ${size} / 512 ))
local bootsize=$(( ${boot} * 1024 ))
local bootoffset=$(( ${init} * 1024 ))
local asize=$(( ${totalsize} - ${bootsize} - ${bootoffset} ))
local aoffset=$(( ${bootoffset} + ${bootsize} ))
local bps=512
local spt=32
local tpc=64
local spc=2048
local cylinders=$(( ${totalsize} / ${spc} ))
cat << EOF
type: SCSI
disk: STORAGE DEVICE
label: fictitious
flags: removable
bytes/sector: ${bps}
sectors/track: ${spt}
tracks/cylinder: ${tpc}
sectors/cylinder: ${spc}
cylinders: ${cylinders}
total sectors: ${totalsize}
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0
8 partitions:
# size offset fstype [fsize bsize cpg/sgs]
a: ${asize} ${aoffset} 4.2BSD ${fsize} ${bsize} 0 #
c: ${totalsize} 0 unused 0 0 #
e: ${bootsize} ${bootoffset} MSDOS #
EOF
}
make_fstab_evbarm_gpt() {
cat > ${mnt}/etc/fstab << EOF
# NetBSD /etc/fstab
# See /usr/share/examples/fstab/ for more examples.
NAME=${gpt_label_ffs:-netbsd-root} / ffs rw,noatime 1 1
NAME=${gpt_label_boot:-EFI} /boot msdos rw 1 1
ptyfs /dev/pts ptyfs rw
procfs /proc procfs rw
tmpfs /var/shm tmpfs rw,-m1777,-sram%25
EOF
}
make_fstab_evbarm_normal() {
cat > ${mnt}/etc/fstab << EOF
# NetBSD /etc/fstab
# See /usr/share/examples/fstab/ for more examples.
ROOT.a / ffs rw,noatime 1 1
ROOT.e /boot msdos rw 1 1
ptyfs /dev/pts ptyfs rw
procfs /proc procfs rw
tmpfs /var/shm tmpfs rw,-m1777,-sram%25
EOF
}
# From Richard Neswold's:
# http://rich-tbp.blogspot.com/2013/03/netbsd-on-rpi-minimizing-disk-writes.html
# Also for the postfix stuff below
make_fstab_evbarm_minwrites() {
cat > ${mnt}/etc/fstab << EOF
# NetBSD /etc/fstab
# See /usr/share/examples/fstab/ for more examples.
ROOT.a / ffs rw,log,noatime,nodevmtime 1 1
ROOT.e /boot msdos rw 1 1
ptyfs /dev/pts ptyfs rw
procfs /proc procfs rw
tmpfs /tmp tmpfs rw,-s32M
tmpfs /var/log tmpfs rw,union,-s32M
tmpfs /var/run tmpfs rw,union,-s1M
tmpfs /var/mail tmpfs rw,union,-s10M
tmpfs /var/spool/postfix tmpfs rw,union,-s20M
tmpfs /var/db/postfix tmpfs rw,union,-s1M
tmpfs /var/chroot tmpfs rw,union,-s10M
tmpfs /var/shm tmpfs rw,-m1777,-sram%25
EOF
}
make_fstab_evbarm() {
if $gpt; then
make_fstab_evbarm_gpt
elif $minwrites; then
make_fstab_evbarm_minwrites
else
make_fstab_evbarm_normal
fi
echo "./etc/fstab type=file uname=root gname=wheel mode=0644" \
>> "$tmp/selected_sets"
# Missing mount points from fstab
echo "./proc type=dir uname=root gname=wheel mode=0755" \
>> "$tmp/selected_sets"
}
customize_evbarm() {
if $minwrites; then
mkdir ${mnt}/etc/postfix
(umask 022
sed -e 's/fifo/unix/' < ${release}/etc/postfix/master.cf > \
${mnt}/etc/postfix/master.cf)
fi
cp ${release}/etc/rc.conf ${mnt}/etc/rc.conf
cat >> ${mnt}/etc/rc.conf << EOF
dev_exists() {
if /sbin/drvctl -l \$1 >/dev/null 2>&1 ; then
printf YES
else
printf NO
fi
}
is_cloud() {
ret=NO
# AWS EC2
if [ "\$(dev_exists ena0)" = "YES" ]; then
ret=YES
fi
# Oracle OCI
case "\$(/sbin/sysctl -n machdep.dmi.chassis-asset-tag 2>/dev/null)" in
OracleCloud*)
ret=YES
;;
esac
printf \$ret
}
rc_configured=YES
hostname=${hostname:-${board}}
no_swap=YES
savecore=NO
sshd=YES
dhcpcd=YES
ntpd=YES
ntpd_flags="-g"
creds_msdos=YES
creds_msdos_partition=/boot
EOF
if $resize; then
cat >> ${mnt}/etc/rc.conf << EOF
resize_${partition_type}=YES
resize_root=YES
resize_root_flags="-p"
resize_root_postcmd="/sbin/reboot -n"
EOF
fi
echo "./etc/rc.conf type=file uname=root gname=wheel mode=0644" \
>> "$tmp/selected_sets"
mkdir ${mnt}/etc/rc.d
for _f in resize_${partition_type} creds_msdos; do
cp ${DIR}/files/${_f} ${mnt}/etc/rc.d/${_f}
echo "./etc/rc.d/${_f} type=file uname=root gname=wheel mode=0555" \
>> "$tmp/selected_sets"
done
if [ ! -f ${release}/dev/MAKEDEV ]; then
echo ${PROG}: Missing ${release}/dev/MAKEDEV 1>&2
exit 1
fi
echo "${bar} running MAKEDEV ${bar}"
${HOST_SH} ${release}/dev/MAKEDEV -s all | sed -e 's:^\./:\./dev/:' \
>> "$tmp/selected_sets"
echo "${bar} fixing up permissions"
echo "./boot type=dir uname=root gname=wheel mode=0755" \
>> "$tmp/selected_sets"
}
|