summaryrefslogtreecommitdiffstats
path: root/Tools/portbuild/scripts/mkbindist
blob: 24bcd71714984af737ba03d0cbf06f3fefd0ca74 (plain)
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
#!/bin/sh

usage () {
  echo "usage: mkbindist <arch> <branch>"
  exit 1
}
if [ $# != 2 ]; then
  usage
fi

arch=$1
branch=$2
if [ "x$branch" != x4 -a "x$branch" != x4-exp -a "x$branch" != x5 ]; then
  usage
fi

pb=/var/portbuild
. ${pb}/${arch}/portbuild.conf

here=${pb}/${arch}/${branch}
. ${here}/mkbindist.conf

tmpdir=${here}/tmp

# just in case
umount -f ${tmpdir}/usr/src 2>/dev/null

# Clean up ${tmpdir}
rm -rf ${tmpdir} 2>/dev/null
if [ -d ${tmpdir} ]; then
  chflags -R noschg ${tmpdir}
  rm -rf ${tmpdir}
fi
mkdir -p ${tmpdir}

# FTP the snapshot tarball chunks if required
if [ "${ftp}" != 0 ]; then
  cd ${here}
  rm -rf bindist/ftp
  mkdir -p bindist/ftp
  cd bindist/ftp
  for i in ${ftpdists}; do
    /usr/bin/ftp -a "ftp://${ftpserver}/${ftpurl}/${rel}/$i.??"
  done
  cd ${here}
fi

# Set up the tmpdir directory hierarchy
cd ${tmpdir}
mtree -deU -f ${here}/src/etc/mtree/BSD.root.dist -p ${tmpdir}/
mtree -deU -f ${here}/src/etc/mtree/BSD.var.dist -p ${tmpdir}/var
mtree -deU -f ${here}/src/etc/mtree/BSD.usr.dist -p ${tmpdir}/usr
mtree -deU -f ${here}/src/etc/mtree/BSD.local.dist -p ${tmpdir}/usr/local

# Copy the files into the tmpdir.  Use an existing built world, or the ftp
# files.
if [ "${useworld}" = 1 ]; then
  (cd ${worlddir}; find -dx . | \
    grep -v -E '^./usr/(X11R6|local|obj|opt|ports|src)' | \
    grep -v '^./home' | \
    grep -v '^./var/db/pkg' | \
    cpio -dump ${tmpdir})
else
  for i in ${ftpdists}; do
    cat ${here}/bindist/ftp/$(basename $i).?? | tar --unlink -xzpf -
  done
fi

# Customize the tmpdir
rm -rf $(cat ${here}/bindist/delete)
mkdir -p $(cat ${here}/bindist/dirlist)
(cd ${here}/bindist/files; find -dx . | cpio -dump ${tmpdir})

# Post-processing of installed world

date '+%Y%m%d' > var/db/port.mkversion

rm -f kernel.GENERIC

mkdir ${tmpdir}/var/run

chroot ${tmpdir} /sbin/ldconfig /usr/lib
if [ "${arch}" = "i386" ]; then
	chroot ${tmpdir} /sbin/ldconfig -aout /usr/lib/aout
	rm -f /usr/lib/aout/lib*_p.a
fi
#sed -e "s/%%KERNEL%%/${kernel}/g" ${here}/dokernel > ${tmpdir}/dokernel

# XXX Rebuild kernel for some reason.  No idea why, and
# note that it's using the source tree which is cvs
# updated during the port build process, which is
# usually newer than the host environment and the chroot.

mount ${master}:${here}/src ${tmpdir}/usr/src
sleep 5 # XXX !!!

# Cater to different build locations of 4.x and 5.x
#if [ -d ${here}/src/sys/i386/compile ]; then
#  chroot ${tmpdir} sh -c "cd /usr/src/sys/i386/conf && config ${kernel} && cd /sys/i386/compile/${kernel} && make depend -DNO_MODULES && make all install -DNO_MODULES"
#else
#  chroot ${tmpdir} sh -c "cd /usr/src/sys/i386/conf && config ${kernel} && cd /sys/compile/${kernel} && make depend -DNO_MODULES && make all install -DNO_MODULES"
#fi

#chroot ${tmpdir} sh -c "cd /usr/src/sys/boot && make obj && make depend && make all install"
umount -f ${tmpdir}/usr/src
ln -sf ${tmpdir}/kernel.GENERIC ${tmpdir}/kernel
rm -rf ${tmpdir}/kernel.old ${tmpdir}/modules.old ${tmpdir}/boot/kernel.old

# Rebuild device nodes.  Again, this was probably intended
# to make sure they're correct for the host kernel, not
# the chroot kernel, but it's using the wrong source tree.
if [ -f ${here}/src/etc/MAKEDEV ]; then
  cp ${here}/src/etc/MAKEDEV ${tmpdir}/dev
else
  cp ${here}/src/etc/etc.$(uname -m)/MAKEDEV ${tmpdir}/dev
fi

# Create the tarballs
mkdir -p ${here}/tarballs
cd ${tmpdir}
tar cf ${here}/tarballs/bindist.tar.new .
mv -f ${here}/tarballs/bindist.tar.new ${here}/tarballs/bindist.tar

# Clean up
cd ${here}
rm -rf ${tmpdir} 2>/dev/null
if [ -d ${tmpdir} ]; then
  chflags -R noschg ${tmpdir}
  rm -rf ${tmpdir}
fi
OpenPOWER on IntegriCloud