Newer
Older
# Copyright (c) 2012-2014 Robert Nelson <robertcnelson@gmail.com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
DIR=$PWD
host_arch="$(uname -m)"
OIB_DIR="$(dirname "$( cd "$(dirname "$0")" ; pwd -P )" )"
check_defines () {
if [ ! "${tempdir}" ] ; then
echo "scripts/deboostrap_first_stage.sh: Error: tempdir undefined"
exit 1
fi
if [ ! "${export_filename}" ] ; then
echo "scripts/deboostrap_first_stage.sh: Error: export_filename undefined"
exit 1
fi
if [ ! "${deb_distribution}" ] ; then
echo "scripts/deboostrap_first_stage.sh: Error: deb_distribution undefined"
if [ ! "${deb_codename}" ] ; then
echo "scripts/deboostrap_first_stage.sh: Error: deb_codename undefined"
if [ ! "${deb_arch}" ] ; then
echo "scripts/deboostrap_first_stage.sh: Error: deb_arch undefined"
exit 1
fi
if [ ! "${apt_proxy}" ] ; then
apt_proxy=""
fi
case "${deb_distribution}" in
debian)
deb_components=${deb_components:-"main contrib non-free"}
deb_mirror=${deb_mirror:-"ftp.us.debian.org/debian/"}
;;
ubuntu)
deb_components=${deb_components:-"main universe multiverse"}
deb_mirror=${deb_mirror:-"ports.ubuntu.com/ubuntu-ports/"}
;;
esac
Robert Nelson
committed
if [ ! "${rfs_username}" ] ; then
##Backwards compat pre variables.txt doc
if [ "${user_name}" ] ; then
rfs_username="${user_name}"
else
rfs_username="${deb_distribution}"
Robert Nelson
committed
echo "rfs_username: undefined using: [${rfs_username}]"
fi
fi
if [ ! "${rfs_fullname}" ] ; then
##Backwards compat pre variables.txt doc
if [ "${full_name}" ] ; then
rfs_fullname="${full_name}"
else
rfs_fullname="Demo User"
echo "rfs_fullname: undefined using: [${rfs_fullname}]"
fi
Robert Nelson
committed
if [ ! "${rfs_password}" ] ; then
##Backwards compat pre variables.txt doc
if [ "${password}" ] ; then
rfs_password="${password}"
else
rfs_password="temppwd"
echo "rfs_password: undefined using: [${rfs_password}]"
fi
Robert Nelson
committed
if [ ! "${rfs_hostname}" ] ; then
##Backwards compat pre variables.txt doc
if [ "${image_hostname}" ] ; then
rfs_hostname="${image_hostname}"
else
rfs_hostname="arm"
echo "rfs_hostname: undefined using: [${rfs_hostname}]"
fi
Robert Nelson
committed
if [ "x${deb_additional_pkgs}" = "x" ] ; then
Robert Nelson
committed
##Backwards compat pre configs
deb_additional_pkgs="$(echo ${base_pkg_list} | sed 's/,/ /g')"
Robert Nelson
committed
fi
else
deb_additional_pkgs="$(echo ${deb_additional_pkgs} | sed 's/,/ /g')"
Robert Nelson
committed
fi
if [ "x${repo_rcnee}" = "xenable" ] ; then
if [ ! "x${repo_rcnee_pkg_list}" = "x" ] ; then
deb_additional_pkgs="${deb_additional_pkgs} ${repo_rcnee_pkg_list}"
fi
fi
}
report_size () {
echo "Log: Size of: [${tempdir}]: `du -sh ${tempdir} 2>/dev/null | awk '{print $1}'`"
}
chroot_mount () {
if [ "$(mount | grep ${tempdir}/sys | awk '{print $3}')" != "${tempdir}/sys" ] ; then
sudo mount -t sysfs sysfs ${tempdir}/sys
fi
if [ "$(mount | grep ${tempdir}/proc | awk '{print $3}')" != "${tempdir}/proc" ] ; then
sudo mount -t proc proc ${tempdir}/proc
fi
if [ ! -d ${tempdir}/dev/pts ] ; then
sudo mkdir -p ${tempdir}/dev/pts || true
fi
if [ "$(mount | grep ${tempdir}/dev/pts | awk '{print $3}')" != "${tempdir}/dev/pts" ] ; then
sudo mount -t devpts devpts ${tempdir}/dev/pts
fi
}
chroot_umount () {
if [ "$(mount | grep ${tempdir}/dev/pts | awk '{print $3}')" = "${tempdir}/dev/pts" ] ; then
sudo umount -f ${tempdir}/dev/pts
fi
if [ "$(mount | grep ${tempdir}/proc | awk '{print $3}')" = "${tempdir}/proc" ] ; then
sudo umount -f ${tempdir}/proc
fi
if [ "$(mount | grep ${tempdir}/sys | awk '{print $3}')" = "${tempdir}/sys" ] ; then
sudo umount -f ${tempdir}/sys
fi
}
check_defines
if [ "x${host_arch}" != "xarmv7l" ] ; then
sudo cp $(which qemu-arm-static) ${tempdir}/usr/bin/
fi
echo "Log: Running: debootstrap second-stage in [${tempdir}]"
sudo chroot ${tempdir} debootstrap/debootstrap --second-stage
echo "Log: Complete: [sudo chroot ${tempdir} debootstrap/debootstrap --second-stage]"
if [ "x${chroot_very_small_image}" = "xenable" ] ; then
#so debootstrap just extracts the *.deb's, so lets clean this up hackish now,
#but then allow dpkg to delete these extra files when installed later..
sudo rm -rf ${tempdir}/usr/share/locale/* || true
sudo rm -rf ${tempdir}/usr/share/man/* || true
sudo rm -rf ${tempdir}/usr/share/doc/* || true
#dpkg 1.15.8++, No Docs...
sudo mkdir -p ${tempdir}/etc/dpkg/dpkg.cfg.d/ || true
echo "# Delete locales" > /tmp/01_nodoc
echo "path-exclude=/usr/share/locale/*" >> /tmp/01_nodoc
echo "" >> /tmp/01_nodoc
echo "# Delete man pages" >> /tmp/01_nodoc
echo "path-exclude=/usr/share/man/*" >> /tmp/01_nodoc
echo "" >> /tmp/01_nodoc
echo "# Delete docs" >> /tmp/01_nodoc
echo "path-exclude=/usr/share/doc/*" >> /tmp/01_nodoc
echo "path-include=/usr/share/doc/*/copyright" >> /tmp/01_nodoc
echo "" >> /tmp/01_nodoc
sudo mv /tmp/01_nodoc ${tempdir}/etc/dpkg/dpkg.cfg.d/01_nodoc
sudo mkdir -p ${tempdir}/etc/apt/apt.conf.d/ || true
#apt: no local cache
echo "Dir::Cache {" > /tmp/02nocache
echo " srcpkgcache \"\";" >> /tmp/02nocache
echo " pkgcache \"\";" >> /tmp/02nocache
echo "}" >> /tmp/02nocache
sudo mv /tmp/02nocache ${tempdir}/etc/apt/apt.conf.d/02nocache
#apt: drop translations...
echo "Acquire::Languages \"none\";" > /tmp/02translations
sudo mv /tmp/02translations ${tempdir}/etc/apt/apt.conf.d/02translations
echo "Log: after locale/man purge"
report_size
fi
sudo mkdir -p ${tempdir}/etc/dpkg/dpkg.cfg.d/ || true
echo "# neuter flash-kernel" > /tmp/01_noflash_kernel
echo "path-exclude=/usr/share/flash-kernel/db/all.db" >> /tmp/01_noflash_kernel
echo "path-exclude=/etc/initramfs/post-update.d/flash-kernel" >> /tmp/01_noflash_kernel
echo "path-exclude=/etc/kernel/postinst.d/zz-flash-kernel" >> /tmp/01_noflash_kernel
echo "path-exclude=/etc/kernel/postrm.d/zz-flash-kernel" >> /tmp/01_noflash_kernel
echo "" >> /tmp/01_noflash_kernel
sudo mv /tmp/01_noflash_kernel ${tempdir}/etc/dpkg/dpkg.cfg.d/01_noflash_kernel
sudo mkdir -p ${tempdir}/usr/share/flash-kernel/db/ || true
sudo cp -v ${OIB_DIR}/target/other/rcn-ee.db ${tempdir}/usr/share/flash-kernel/db/
Robert Nelson
committed
if [ "x${deb_distribution}" = "xdebian" ] ; then
#generic apt.conf tweaks for flash/mmc devices to save on wasted space...
sudo mkdir -p ${tempdir}/etc/apt/apt.conf.d/ || true
#apt: emulate apt-get clean:
echo '#Custom apt-get clean' > /tmp/02apt-get-clean
echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /tmp/02apt-get-clean
echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /tmp/02apt-get-clean
echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /tmp/02apt-get-clean
sudo mv /tmp/02apt-get-clean ${tempdir}/etc/apt/apt.conf.d/02apt-get-clean
#apt: drop translations
echo 'Acquire::Languages "none";' > /tmp/02-no-languages
sudo mv /tmp/02-no-languages ${tempdir}/etc/apt/apt.conf.d/02-no-languages
#apt: /var/lib/apt/lists/, store compressed only
echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /tmp/02compress-indexes
sudo mv /tmp/02compress-indexes ${tempdir}/etc/apt/apt.conf.d/02compress-indexes
#apt: make sure apt-cacher-ng doesn't break oracle-java8-installer
echo 'Acquire::http::Proxy::download.oracle.com "DIRECT";' > /tmp/03-proxy-oracle
sudo mv /tmp/03-proxy-oracle ${tempdir}/etc/apt/apt.conf.d/03-proxy-oracle
Robert Nelson
committed
#set initial 'seed' time...
sudo sh -c "date --utc \"+%4Y%2m%2d%2H%2M\" > ${tempdir}/etc/timestamp"
wfile="/tmp/sources.list"
echo "deb http://${deb_mirror} ${deb_codename} ${deb_components}" > ${wfile}
echo "#deb-src http://${deb_mirror} ${deb_codename} ${deb_components}" >> ${wfile}
echo "" >> ${wfile}
Robert Nelson
committed
stretch|buster|sid)
echo "#deb http://${deb_mirror} ${deb_codename}-updates ${deb_components}" >> ${wfile}
echo "##deb-src http://${deb_mirror} ${deb_codename}-updates ${deb_components}" >> ${wfile}
echo "deb http://${deb_mirror} ${deb_codename}-updates ${deb_components}" >> ${wfile}
echo "#deb-src http://${deb_mirror} ${deb_codename}-updates ${deb_components}" >> ${wfile}
;;
esac
case "${deb_codename}" in
echo "" >> ${wfile}
echo "deb http://security.debian.org/ ${deb_codename}/updates ${deb_components}" >> ${wfile}
echo "#deb-src http://security.debian.org/ ${deb_codename}/updates ${deb_components}" >> ${wfile}
echo "" >> ${wfile}
if [ "x${chroot_enable_debian_backports}" = "xenable" ] ; then
echo "deb http://ftp.debian.org/debian ${deb_codename}-backports ${deb_components}" >> ${wfile}
echo "#deb-src http://ftp.debian.org/debian ${deb_codename}-backports ${deb_components}" >> ${wfile}
echo "#deb http://ftp.debian.org/debian ${deb_codename}-backports ${deb_components}" >> ${wfile}
echo "##deb-src http://ftp.debian.org/debian ${deb_codename}-backports ${deb_components}" >> ${wfile}
Robert Nelson
committed
echo "" >> ${wfile}
echo "#deb http://security.debian.org/ ${deb_codename}/updates ${deb_components}" >> ${wfile}
echo "##deb-src http://security.debian.org/ ${deb_codename}/updates ${deb_components}" >> ${wfile}
echo "" >> ${wfile}
;;
if [ "x${repo_external}" = "xenable" ] ; then
echo "" >> ${wfile}
echo "deb [arch=${repo_external_arch}] ${repo_external_server} ${repo_external_dist} ${repo_external_components}" >> ${wfile}
echo "#deb-src [arch=${repo_external_arch}] ${repo_external_server} ${repo_external_dist} ${repo_external_components}" >> ${wfile}
fi
if [ "x${repo_rcnee}" = "xenable" ] ; then
echo "" >> ${wfile}
echo "#Kernel source (repos.rcn-ee.net) : https://github.com/RobertCNelson/linux-stable-rcn-ee" >> ${wfile}
echo "#" >> ${wfile}
echo "#git clone https://github.com/RobertCNelson/linux-stable-rcn-ee" >> ${wfile}
echo "#cd ./linux-stable-rcn-ee" >> ${wfile}
echo "#git checkout \`uname -r\` -b tmp" >> ${wfile}
echo "#" >> ${wfile}
echo "deb [arch=armhf] http://repos.rcn-ee.net/${deb_distribution}/ ${deb_codename} main" >> ${wfile}
echo "#deb-src [arch=armhf] http://repos.rcn-ee.net/${deb_distribution}/ ${deb_codename} main" >> ${wfile}
sudo cp -v ${OIB_DIR}/target/keyring/repos.rcn-ee.net-archive-keyring.asc ${tempdir}/tmp/repos.rcn-ee.net-archive-keyring.asc
if [ -f /tmp/sources.list ] ; then
sudo mv /tmp/sources.list ${tempdir}/etc/apt/sources.list
fi
if [ "x${repo_external}" = "xenable" ] ; then
if [ ! "x${repo_external_key}" = "x" ] ; then
sudo cp -v ${OIB_DIR}/target/keyring/${repo_external_key} ${tempdir}/tmp/${repo_external_key}
echo "Acquire::http::Proxy \"http://${apt_proxy}\";" > /tmp/apt.conf
sudo mv /tmp/apt.conf ${tempdir}/etc/apt/apt.conf
echo "127.0.0.1 localhost" > /tmp/hosts
echo "127.0.1.1 ${rfs_hostname}.localdomain ${rfs_hostname}" >> /tmp/hosts
echo "" >> /tmp/hosts
echo "# The following lines are desirable for IPv6 capable hosts" >> /tmp/hosts
echo "::1 localhost ip6-localhost ip6-loopback" >> /tmp/hosts
echo "ff02::1 ip6-allnodes" >> /tmp/hosts
echo "ff02::2 ip6-allrouters" >> /tmp/hosts
Robert Nelson
committed
echo "${rfs_hostname}" > /tmp/hostname
sudo mv /tmp/hostname ${tempdir}/etc/hostname
case "${deb_distribution}" in
sudo cp ${OIB_DIR}/target/init_scripts/generic-${deb_distribution}.sh ${tempdir}/etc/init.d/generic-boot-script.sh
sudo cp ${OIB_DIR}/target/init_scripts/capemgr-${deb_distribution}.sh ${tempdir}/etc/init.d/capemgr.sh
sudo cp ${OIB_DIR}/target/init_scripts/capemgr ${tempdir}/etc/default/
sudo cp ${OIB_DIR}/target/init_scripts/generic-${deb_distribution}.conf ${tempdir}/etc/init/generic-boot-script.conf
sudo cp ${OIB_DIR}/target/init_scripts/capemgr-${deb_distribution}.sh ${tempdir}/etc/init/capemgr.sh
sudo cp ${OIB_DIR}/target/init_scripts/capemgr ${tempdir}/etc/default/
if [ -f ${tempdir}/etc/init/failsafe.conf ] ; then
#Ubuntu: with no ethernet cable connected it can take up to 2 mins to login, removing upstart sleep calls..."
sudo sed -i -e 's:sleep 20:#sleep 20:g' ${tempdir}/etc/init/failsafe.conf
sudo sed -i -e 's:sleep 40:#sleep 40:g' ${tempdir}/etc/init/failsafe.conf
sudo sed -i -e 's:sleep 59:#sleep 59:g' ${tempdir}/etc/init/failsafe.conf
fi
#Backward compatibility, as setup_sdcard.sh expects [lsb_release -si > /etc/rcn-ee.conf]
echo "distro=${distro}" > /tmp/rcn-ee.conf
echo "rfs_username=${rfs_username}" >> /tmp/rcn-ee.conf
echo "release_date=${time}" >> /tmp/rcn-ee.conf
echo "third_party_modules=${third_party_modules}" >> /tmp/rcn-ee.conf
sudo mv /tmp/rcn-ee.conf ${tempdir}/etc/rcn-ee.conf
#use /etc/dogtag for all:
if [ ! "x${rts_etc_dogtag}" = "x" ] ; then
echo "${rts_etc_dogtag} ${time}" > /tmp/dogtag
sudo mv /tmp/dogtag ${tempdir}/etc/dogtag
fi
cat > ${DIR}/chroot_script.sh <<-__EOF__
#!/bin/sh -e
export LC_ALL=C
export DEBIAN_FRONTEND=noninteractive
dpkg_check () {
unset pkg_is_not_installed
Robert Nelson
committed
LC_ALL=C dpkg --list | awk '{print \$2}' | grep "^\${pkg}$" >/dev/null || pkg_is_not_installed="true"
Robert Nelson
committed
dpkg_package_missing () {
echo "Log: (chroot) package [\${pkg}] was not installed... (add to deb_include if functionality is really needed)"
Robert Nelson
committed
}
is_this_qemu () {
unset warn_qemu_will_fail
if [ -f /usr/bin/qemu-arm-static ] ; then
warn_qemu_will_fail=1
fi
}
echo "Log: (chroot) Warning, qemu can fail here... (run on real armv7l hardware for production images)"
echo "Log: (chroot): [\${qemu_command}]"
fi
}
cat > /usr/sbin/policy-rc.d <<EOF
#!/bin/sh
exit 101
EOF
chmod +x /usr/sbin/policy-rc.d
Robert Nelson
committed
. /etc/rcn-ee.conf
if [ "x\${distro}" = "xUbuntu" ] ; then
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
fi
if [ "x${repo_rcnee}" = "xenable" ] ; then
apt-key add /tmp/repos.rcn-ee.net-archive-keyring.asc
rm -f /tmp/repos.rcn-ee.net-archive-keyring.asc || true
fi
if [ "x${repo_external}" = "xenable" ] ; then
apt-key add /tmp/${repo_external_key}
rm -f /tmp/${repo_external_key} || true
apt-get update
apt-get upgrade -y --force-yes
Robert Nelson
committed
if [ ! "x${deb_additional_pkgs}" = "x" ] ; then
#Install the user choosen list.
Robert Nelson
committed
echo "Log: (chroot) Installing: ${deb_additional_pkgs}"
apt-get -y --force-yes install ${deb_additional_pkgs}
if [ ! "x${repo_rcnee_pkg_version}" = "x" ] ; then
echo "Log: (chroot) Installing modules for: ${repo_rcnee_pkg_version}"
apt-get -y --force-yes install mt7601u-modules-${repo_rcnee_pkg_version} || true
depmod -a ${repo_rcnee_pkg_version}
update-initramfs -u -k ${repo_rcnee_pkg_version}
if [ "x${chroot_enable_debian_backports}" = "xenable" ] ; then
if [ ! "x${chroot_debian_backports_pkg_list}" = "x" ] ; then
echo "Log: (chroot) Installing (from backports): ${chroot_debian_backports_pkg_list}"
sudo apt-get -y --force-yes install ${chroot_debian_backports_pkg_list}
fi
fi
if [ ! "x${repo_external_pkg_list}" = "x" ] ; then
echo "Log: (chroot) Installing (from external repo): ${repo_external_pkg_list}"
apt-get -y --force-yes install ${repo_external_pkg_list}
fi
Robert Nelson
committed
system_tweaks () {
echo "[options]" > /etc/e2fsck.conf
echo "broken_system_clock = true" >> /etc/e2fsck.conf
if [ -f /etc/systemd/systemd-journald.conf ] ; then
sed -i -e 's:#SystemMaxUse=:SystemMaxUse=8M:g' /etc/systemd/systemd-journald.conf
fi
}
set_locale () {
Robert Nelson
committed
pkg="locales"
dpkg_check
if [ "x\${pkg_is_not_installed}" = "x" ] ; then
if [ ! "x${rfs_default_locale}" = "x" ] ; then
Debian)
echo "Log: (chroot) Debian: setting up locales: [${rfs_default_locale}]"
sed -i -e 's:# ${rfs_default_locale} UTF-8:${rfs_default_locale} UTF-8:g' /etc/locale.gen
locale-gen
;;
Ubuntu)
echo "Log: (chroot) Ubuntu: setting up locales: [${rfs_default_locale}]"
locale-gen ${rfs_default_locale}
;;
esac
echo "LANG=${rfs_default_locale}" > /etc/default/locale
fi
Robert Nelson
committed
else
dpkg_package_missing
apt-get -y --force-yes install deborphan
# Prevent deborphan from removing explicitly required packages
deborphan -A ${deb_additional_pkgs} ${repo_external_pkg_list} ${deb_include}
deborphan | xargs apt-get -y remove --purge
# Purge keep file
deborphan -Z
#FIXME, only tested on wheezy...
apt-get -y remove deborphan dialog gettext-base libasprintf0c2 --purge
apt-get clean
}
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
wget --no-verbose --directory-prefix=/tmp/ \${kernel_url}
#This should create a list of files on the server
#<a href="file"></a>
cat /tmp/index.html | grep "<a href=" > /tmp/temp.html
#Note: cat drops one \...
#sed -i -e "s/<a href/\\n<a href/g" /tmp/temp.html
sed -i -e "s/<a href/\\\n<a href/g" /tmp/temp.html
sed -i -e 's/\"/\"><\/a>\n/2' /tmp/temp.html
cat /tmp/temp.html | grep href > /tmp/index.html
deb_file=\$(cat /tmp/index.html | grep linux-image)
deb_file=\$(echo \${deb_file} | awk -F ".deb" '{print \$1}')
deb_file=\${deb_file##*linux-image-}
kernel_version=\$(echo \${deb_file} | awk -F "_" '{print \$1}')
echo "Log: Using: \${kernel_version}"
deb_file="linux-image-\${deb_file}.deb"
wget --directory-prefix=/tmp/ \${kernel_url}\${deb_file}
unset dtb_file
dtb_file=\$(cat /tmp/index.html | grep dtbs.tar.gz | head -n 1)
dtb_file=\$(echo \${dtb_file} | awk -F "\"" '{print \$2}')
if [ "\${dtb_file}" ] ; then
Robert Nelson
committed
wget --directory-prefix=/boot/ \${kernel_url}\${dtb_file}
fi
dpkg -x /tmp/\${deb_file} /
if [ "x\${third_party_modules}" = "xenable" ] ; then
unset thirdparty_file
thirdparty_file=\$(cat /tmp/index.html | grep thirdparty)
thirdparty_file=\$(echo \${thirdparty_file} | awk -F "\"" '{print \$2}')
if [ "\${thirdparty_file}" ] ; then
wget --directory-prefix=/tmp/ \${kernel_url}\${thirdparty_file}
if [ -f /tmp/thirdparty ] ; then
/bin/sh /tmp/thirdparty
fi
pkg="initramfs-tools"
dpkg_check
if [ "x\${pkg_is_not_installed}" = "x" ] ; then
depmod \${kernel_version} -a
update-initramfs -c -k \${kernel_version}
else
dpkg_package_missing
fi
source_file=\$(cat /tmp/index.html | grep .diff.gz | head -n 1)
source_file=\$(echo \${source_file} | awk -F "\"" '{print \$2}')
if [ "\${source_file}" ] ; then
wget --directory-prefix=/opt/source/ \${kernel_url}\${source_file}
rm -f /tmp/index.html || true
rm -f /tmp/temp.html || true
rm -f /tmp/\${deb_file} || true
rm -f /boot/System.map-\${kernel_version} || true
mv /boot/config-\${kernel_version} /opt/source || true
rm -rf /usr/src/linux-headers* || true
groupadd -r admin || true
groupadd -r spi || true
cat /etc/group | grep ^i2c || groupadd -r i2c || true
cat /etc/group | grep ^kmem || groupadd -r kmem || true
cat /etc/group | grep ^netdev || groupadd -r netdev || true
Robert Nelson
committed
cat /etc/group | grep ^systemd-journal || groupadd -r systemd-journal || true
cat /etc/group | grep ^weston-launch || groupadd -r weston-launch || true
cat /etc/group | grep ^xenomai || groupadd -r xenomai || true
echo "KERNEL==\"spidev*\", GROUP=\"spi\", MODE=\"0660\"" > /etc/udev/rules.d/50-spi.rules
default_groups="admin,adm,dialout,i2c,kmem,spi,cdrom,floppy,audio,dip,video,netdev,plugdev,users,systemd-journal,weston-launch,xenomai"
pkg="sudo"
dpkg_check
if [ "x\${pkg_is_not_installed}" = "x" ] ; then
echo "Log: (chroot) adding admin group to /etc/sudoers"
echo "%admin ALL=(ALL) ALL" >>/etc/sudoers
Robert Nelson
committed
else
dpkg_package_missing
Robert Nelson
committed
if [ "x${rfs_disable_root}" = "xenable" ] ; then
echo "Log: (Chroot) WARNING: sudo not installed and no root user"
fi
Robert Nelson
committed
pass_crypt=\$(perl -e 'print crypt(\$ARGV[0], "rcn-ee-salt")' ${rfs_password})
Robert Nelson
committed
useradd -G "\${default_groups}" -s /bin/bash -m -p \${pass_crypt} -c "${rfs_fullname}" ${rfs_username}
mkdir -p /home/${rfs_username}/bin
chown ${rfs_username}:${rfs_username} /home/${rfs_username}/bin
if [ "x${rfs_disable_root}" = "xenable" ] ; then
passwd -l root || true
else
passwd <<-EOF
root
root
EOF
fi
Robert Nelson
committed
sed -i -e 's:#EXTRA_GROUPS:EXTRA_GROUPS:g' /etc/adduser.conf
sed -i -e 's:dialout:dialout i2c spi:g' /etc/adduser.conf
Robert Nelson
committed
sed -i -e 's:#ADD_EXTRA_GROUPS:ADD_EXTRA_GROUPS:g' /etc/adduser.conf
;;
Ubuntu)
passwd -l root || true
;;
esac
if [ "x${rfs_startup_scripts}" = "xenable" ] ; then
Robert Nelson
committed
if [ -f /etc/init.d/generic-boot-script.sh ] ; then
chown root:root /etc/init.d/generic-boot-script.sh
chmod +x /etc/init.d/generic-boot-script.sh
insserv generic-boot-script.sh || true
fi
if [ -f /etc/init.d/capemgr.sh ] ; then
chown root:root /etc/init.d/capemgr.sh
chown root:root /etc/default/capemgr
chmod +x /etc/init.d/capemgr.sh
insserv capemgr.sh || true
fi
ubuntu_startup_script () {
if [ "x${rfs_startup_scripts}" = "xenable" ] ; then
Robert Nelson
committed
if [ -f /etc/init/generic-boot-script.conf ] ; then
chown root:root /etc/init/generic-boot-script.conf
fi
#Not Optional...
#(protects your kernel, from Ubuntu repo which may try to take over your system on an upgrade)...
if [ -f /etc/flash-kernel.conf ] ; then
chown root:root /etc/flash-kernel.conf
fi
}
Debian)
debian_startup_script
;;
Ubuntu)
ubuntu_startup_script
;;
Robert Nelson
committed
if [ ! "x${rfs_opt_scripts}" = "x" ] ; then
Robert Nelson
committed
Robert Nelson
committed
if [ -f /usr/bin/git ] ; then
Robert Nelson
committed
mkdir -p /opt/scripts/ || true
qemu_command="git clone ${rfs_opt_scripts} /opt/scripts/ --depth 1 || true"
Robert Nelson
committed
qemu_warning
git clone ${rfs_opt_scripts} /opt/scripts/ --depth 1 || true
Robert Nelson
committed
sync
if [ -f /opt/scripts/.git/config ] ; then
echo "/opt/scripts/ : ${rfs_opt_scripts}" >> /opt/source/list.txt
Robert Nelson
committed
chown -R ${rfs_username}:${rfs_username} /opt/scripts/
Robert Nelson
committed
fi
Robert Nelson
committed
fi
fi
systemd_tweaks () {
#We have systemd, so lets use it..
#systemd v215: systemd-timesyncd.service replaces ntpdate
#enabled by default in v216 (not in jessie)
if [ -f /lib/systemd/system/systemd-timesyncd.service ] ; then
echo "Log: (chroot): enabling: systemd-timesyncd.service"
systemctl enable systemd-timesyncd.service || true
#set our own initial date stamp, otherwise we get July 2014
touch /var/lib/systemd/clock
chown systemd-timesync:systemd-timesync /var/lib/systemd/clock
#Remove ntpdate
if [ -f /usr/sbin/ntpdate ] ; then
apt-get remove -y --force-yes ntpdate --purge || true
fi
fi
}
if [ -f /etc/apt/apt.conf ] ; then
rm -rf /etc/apt/apt.conf || true
fi
apt-get clean
rm -rf /var/lib/apt/lists/*
if [ -d /var/cache/bbx15-ducati-firmware-installer/ ] ; then
rm -rf /var/cache/bbx15-ducati-firmware-installer/ || true
fi
if [ -d /var/cache/cloud9-installer/ ] ; then
rm -rf /var/cache/cloud9-installer/ || true
fi
if [ -d /var/cache/ti-c6000-cgt-v8.0.x-installer/ ] ; then
rm -rf /var/cache/ti-c6000-cgt-v8.0.x-installer/ || true
fi
if [ -d /var/cache/ti-pru-cgt-installer/ ] ; then
rm -rf /var/cache/ti-pru-cgt-installer/ || true
fi
rm -f /usr/sbin/policy-rc.d
if [ "x\${distro}" = "xUbuntu" ] ; then
rm -f /sbin/initctl || true
dpkg-divert --local --rename --remove /sbin/initctl
fi
#left over from init/upstart scripts running in chroot...
if [ -d /var/run/ ] ; then
rm -rf /var/run/* || true
fi
#cat /chroot_script.sh
Robert Nelson
committed
system_tweaks
Robert Nelson
committed
set_locale
Robert Nelson
committed
if [ "x${chroot_very_small_image}" = "xenable" ] ; then
Robert Nelson
committed
add_user
mkdir -p /opt/source || true
pkg="wget"
dpkg_check
if [ "x\${pkg_is_not_installed}" = "x" ] ; then
if [ "${rfs_kernel}" ] ; then
for kernel_url in ${rfs_kernel} ; do dl_kernel ; done
Robert Nelson
committed
else
dpkg_package_missing
if [ -f /lib/systemd/systemd ] ; then
systemd_tweaks
fi
rm -f /chroot_script.sh || true
__EOF__
sudo mv ${DIR}/chroot_script.sh ${tempdir}/chroot_script.sh
if [ "x${include_firmware}" = "xenable" ] ; then
if [ ! -d ${tempdir}/lib/firmware/ ] ; then
sudo mkdir -p ${tempdir}/lib/firmware/ || true
fi
if [ -d ${DIR}/git/linux-firmware/brcm/ ] ; then
sudo mkdir -p ${tempdir}/lib/firmware/brcm
sudo cp -v ${DIR}/git/linux-firmware/LICENCE.broadcom_bcm43xx ${tempdir}/lib/firmware/
sudo cp -v ${DIR}/git/linux-firmware/brcm/* ${tempdir}/lib/firmware/brcm
fi
if [ -f ${DIR}/git/linux-firmware/carl9170-1.fw ] ; then
sudo cp -v ${DIR}/git/linux-firmware/carl9170-1.fw ${tempdir}/lib/firmware/
fi
if [ -f ${DIR}/git/linux-firmware/htc_9271.fw ] ; then
sudo cp -v ${DIR}/git/linux-firmware/LICENCE.atheros_firmware ${tempdir}/lib/firmware/
sudo cp -v ${DIR}/git/linux-firmware/htc_9271.fw ${tempdir}/lib/firmware/
fi
if [ -d ${DIR}/git/linux-firmware/rtlwifi/ ] ; then
sudo mkdir -p ${tempdir}/lib/firmware/rtlwifi
sudo cp -v ${DIR}/git/linux-firmware/LICENCE.rtlwifi_firmware.txt ${tempdir}/lib/firmware/
sudo cp -v ${DIR}/git/linux-firmware/rtlwifi/* ${tempdir}/lib/firmware/rtlwifi
fi
if [ -d ${DIR}/git/linux-firmware/ti-connectivity/ ] ; then
sudo mkdir -p ${tempdir}/lib/firmware/ti-connectivity
sudo cp -v ${DIR}/git/linux-firmware/LICENCE.ti-connectivity ${tempdir}/lib/firmware/
sudo cp -v ${DIR}/git/linux-firmware/ti-connectivity/* ${tempdir}/lib/firmware/ti-connectivity
fi
fi
if [ -n "${early_chroot_script}" -a -r "${DIR}/target/chroot/${early_chroot_script}" ] ; then
report_size
echo "Calling early_chroot_script script: ${early_chroot_script}"
sudo cp -v ${DIR}/.project ${tempdir}/etc/oib.project
sudo /bin/sh -e ${DIR}/target/chroot/${early_chroot_script} ${tempdir}
early_chroot_script=""
sudo rm -f ${tempdir}/etc/oib.project || true
sudo chroot ${tempdir} /bin/sh -e chroot_script.sh
echo "Log: Complete: [sudo chroot ${tempdir} /bin/sh -e chroot_script.sh]"
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
#Do /etc/issue & /etc/issue.net after chroot_script:
#
#Unpacking base-files (7.2ubuntu5.1) over (7.2ubuntu5) ...
#Setting up base-files (7.2ubuntu5.1) ...
#
#Configuration file '/etc/issue'
# ==> Modified (by you or by a script) since installation.
# ==> Package distributor has shipped an updated version.
# What would you like to do about it ? Your options are:
# Y or I : install the package maintainer's version
# N or O : keep your currently-installed version
# D : show the differences between the versions
# Z : start a shell to examine the situation
# The default action is to keep your current version.
#*** issue (Y/I/N/O/D/Z) [default=N] ? n
if [ ! "x${rts_console_banner}" = "x" ] || [ ! "x${rts_console_user_pass}" = "x" ] ; then
wfile="/tmp/issue"
cat ${tempdir}/etc/issue > ${wfile}
if [ ! "x${rts_etc_dogtag}" = "x" ] ; then
cat ${tempdir}/etc/dogtag >> ${wfile}
echo "" >> ${wfile}
fi
if [ ! "x${rts_console_banner}" = "x" ] ; then
echo "${rts_console_banner}" >> ${wfile}
echo "" >> ${wfile}
fi
if [ ! "x${rts_console_user_pass}" = "x" ] ; then
echo "default username:password is [${rfs_username}:${rfs_password}]" >> ${wfile}
echo "" >> ${wfile}
fi
sudo mv ${wfile} ${tempdir}/etc/issue
fi
if [ ! "x${rts_ssh_banner}" = "x" ] || [ ! "x${rts_ssh_user_pass}" = "x" ] ; then
wfile="/tmp/issue.net"
cat ${tempdir}/etc/issue.net > ${wfile}
echo "" >> ${wfile}
if [ ! "x${rts_etc_dogtag}" = "x" ] ; then
cat ${tempdir}/etc/dogtag >> ${wfile}
echo "" >> ${wfile}
fi
if [ ! "x${rts_ssh_banner}" = "x" ] ; then
echo "${rts_ssh_banner}" >> ${wfile}
echo "" >> ${wfile}
fi
if [ ! "x${rts_ssh_user_pass}" = "x" ] ; then
echo "default username:password is [${rfs_username}:${rfs_password}]" >> ${wfile}
echo "" >> ${wfile}
fi
sudo mv ${wfile} ${tempdir}/etc/issue.net
fi
#usually a qemu failure...
if [ ! "x${rfs_opt_scripts}" = "x" ] ; then
Robert Nelson
committed
if [ ! -f ${tempdir}/opt/scripts/.git/config ] ; then
echo "Log: ERROR: git clone of ${rfs_opt_scripts} failed.."
Robert Nelson
committed
exit 1
fi
fi
if [ -n "${chroot_before_hook}" -a -r "${DIR}/${chroot_before_hook}" ] ; then
report_size
echo "Calling chroot_before_hook script: ${chroot_before_hook}"
. "${DIR}/${chroot_before_hook}"
chroot_before_hook=""
fi
if [ -n "${chroot_script}" -a -r "${DIR}/target/chroot/${chroot_script}" ] ; then
report_size
echo "Calling chroot_script script: ${chroot_script}"
sudo cp -v ${DIR}/target/chroot/${chroot_script} ${tempdir}/final.sh
sudo chroot ${tempdir} /bin/sh -e final.sh
sudo rm -f ${tempdir}/final.sh || true
if [ -f ${tempdir}/npm-debug.log ] ; then
echo "Log: ERROR: npm error in script, review log [cat ${tempdir}/npm-debug.log]..."
exit 1
fi
if [ -d ${DIR}/deploy/${export_filename}/ ] ; then
rm -rf ${DIR}/deploy/${export_filename}/ || true
fi
mkdir -p ${DIR}/deploy/${export_filename}/ || true
cp -v ${DIR}/.project ${DIR}/deploy/${export_filename}/image-builder.project
if [ -n "${chroot_after_hook}" -a -r "${DIR}/${chroot_after_hook}" ] ; then
report_size
echo "Calling chroot_after_hook script: ${chroot_after_hook}"
. "${DIR}/${chroot_after_hook}"
chroot_after_hook=""
fi
#add /boot/uEnv.txt update script
if [ -d ${tempdir}/etc/kernel/postinst.d/ ] ; then
sudo cp -v ${OIB_DIR}/target/other/zz-uenv_txt ${tempdir}/etc/kernel/postinst.d/
sudo chmod +x ${tempdir}/etc/kernel/postinst.d/zz-uenv_txt
if [ -f ${tempdir}/usr/bin/qemu-arm-static ] ; then
sudo rm -f ${tempdir}/usr/bin/qemu-arm-static || true
fi
if [ "${rfs_kernel}" ] ; then
if ls ${tempdir}/boot/vmlinuz-* >/dev/null 2>&1 ; then
sudo cp -v ${tempdir}/boot/vmlinuz-* ${DIR}/deploy/${export_filename}/
else
if [ "${rfs_kernel}" ] ; then
echo "Log: ERROR: kernel install failure..."
exit 1
fi
if ls ${tempdir}/boot/initrd.img-* >/dev/null 2>&1 ; then
sudo cp -v ${tempdir}/boot/initrd.img-* ${DIR}/deploy/${export_filename}/
if ls ${tempdir}/boot/*dtbs.tar.gz >/dev/null 2>&1 ; then
sudo cp -v ${tempdir}/boot/*dtbs.tar.gz ${DIR}/deploy/${export_filename}/
Robert Nelson
committed
echo "${rfs_username}:${rfs_password}" > /tmp/user_password.list
sudo mv /tmp/user_password.list ${DIR}/deploy/${export_filename}/user_password.list
#Fixes:
if [ -d ${tempdir}/etc/ssh/ -a "x${keep_ssh_keys}" = "x" ] ; then
#Remove pre-generated ssh keys, these will be regenerated on first bootup...
sudo rm -rf ${tempdir}/etc/ssh/ssh_host_* || true
sudo touch ${tempdir}/etc/ssh/ssh.regenerate || true
fi
#extra home, from chroot machine when running npm install xyz:
unset extra_home
extra_home=$(ls -lh ${tempdir}/home/ | grep -v ${rfs_username} | awk '{print $9}' | tail -1 || true)
if [ ! "x${extra_home}" = "x" ] ; then
if [ -d ${tempdir}/home/${extra_home}/ ] ; then
sudo rm -rf ${tempdir}/home/${extra_home}/ || true
fi
fi
#ID.txt:
if [ -f ${tempdir}/etc/dogtag ] ; then
sudo cp ${tempdir}/etc/dogtag ${DIR}/deploy/${export_filename}/ID.txt
fi