summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorlejeune quentin <qle@odoo.com>2019-11-26 08:33:13 +0000
committerlejeune quentin <qle@odoo.com>2019-11-26 13:36:38 +0000
commit194e49a902dc4d3ea9c8156f2d9d0822a02a5d07 (patch)
treef1900d572ba18ca1ca910230363e02476c06afad /addons
parent46ea06816c11a6f1d74958de79532427de83fe77 (diff)
[IMP] point_of_sale: Refactoring the "build" of the IoT Box
The use of an emulator (qemu) for the IoT Box build posed compatibility and performance issues. So we have the Raspbian filesystem to install and configure packages. closes odoo/odoo#40967 Task: 2145445 X-original-commit: 9c4e23a656bfd7b2f0c40feafadbce1b8d651aa8 Signed-off-by: Quentin Lejeune (qle) <qle@odoo.com>
Diffstat (limited to 'addons')
-rwxr-xr-xaddons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh42
-rwxr-xr-xaddons/point_of_sale/tools/posbox/posbox_create_image.sh41
-rwxr-xr-xaddons/point_of_sale/tools/posbox/posbox_download_images.sh7
3 files changed, 27 insertions, 63 deletions
diff --git a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh
index 95358c9652c..9f2e8438770 100755
--- a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh
+++ b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init_posbox_image.sh
@@ -8,14 +8,14 @@ __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
__base="$(basename ${__file} .sh)"
-# Since we are emulating, the real /boot is not mounted,
-# leading to mismatch between kernel image and modules.
-mount /dev/sda1 /boot
-
# Recommends: antiword, graphviz, ghostscript, python-gevent, poppler-utils
export DEBIAN_FRONTEND=noninteractive
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
+echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc
+echo "export LANG=en_US.UTF-8" >> ~/.bashrc
+echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
+source ~/.bashrc
apt-get update && apt-get -y upgrade
# Do not be too fast to upgrade to more recent firmware and kernel than 4.38
@@ -142,30 +142,15 @@ update-rc.d -f nginx remove
update-rc.d -f dnsmasq remove
update-rc.d timesyncd defaults
-systemctl daemon-reload
systemctl enable ramdisks.service
systemctl disable dphys-swapfile.service
systemctl enable ssh
-
-# USER PI AUTO LOGIN (from nano raspi-config)
-# We take the whole algorithm from raspi-config in order to stay compatible with raspbian infrastructure
-if command -v systemctl > /dev/null && systemctl | grep -q '\-\.mount'; then
- SYSTEMD=1
-elif [ -f /etc/init.d/cron ] && [ ! -h /etc/init.d/cron ]; then
- SYSTEMD=0
-else
- echo "Unrecognised init system"
- return 1
-fi
-if [ $SYSTEMD -eq 1 ]; then
- systemctl set-default graphical.target
- systemctl disable getty@tty1.service
- systemctl enable autologin@.service
- systemctl disable systemd-timesyncd.service
- systemctl disable hostapd.service
-else
- update-rc.d lightdm enable 2
-fi
+systemctl set-default graphical.target
+systemctl disable getty@tty1.service
+systemctl enable autologin@.service
+systemctl disable systemd-timesyncd.service
+systemctl unmask hostapd.service
+systemctl disable hostapd.service
# disable overscan in /boot/config.txt, we can't use
# overwrite_after_init because it's on a different device
@@ -174,10 +159,6 @@ fi
# cf: https://www.raspberrypi.org/documentation/configuration/raspi-config.md
echo "disable_overscan=1" >> /boot/config.txt
-# https://www.raspberrypi.org/forums/viewtopic.php?p=79249
-# to not have "setting up console font and keymap" during boot take ages
-setupcon
-
# exclude /drivers folder from git info to be able to load specific drivers
echo "addons/hw_drivers/drivers/" > /home/pi/odoo/.git/info/exclude
@@ -190,6 +171,3 @@ create_ramdisk_dir "/var"
create_ramdisk_dir "/etc"
create_ramdisk_dir "/tmp"
mkdir /root_bypass_ramdisks
-umount /dev/sda1
-
-reboot
diff --git a/addons/point_of_sale/tools/posbox/posbox_create_image.sh b/addons/point_of_sale/tools/posbox/posbox_create_image.sh
index 1a5b6e322d3..d71393c061e 100755
--- a/addons/point_of_sale/tools/posbox/posbox_create_image.sh
+++ b/addons/point_of_sale/tools/posbox/posbox_create_image.sh
@@ -18,22 +18,22 @@ require_command () {
}
require_command kpartx
-require_command qemu-system-arm
+require_command qemu-arm-static
require_command zerofree
__dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
__file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
__base="$(basename ${__file} .sh)"
-
MOUNT_POINT="${__dir}/root_mount"
OVERWRITE_FILES_BEFORE_INIT_DIR="${__dir}/overwrite_before_init"
OVERWRITE_FILES_AFTER_INIT_DIR="${__dir}/overwrite_after_init"
VERSION=13.0
REPO=https://github.com/odoo/odoo.git
-if [ ! -f kernel-qemu ] || ! file_exists *raspbian*.img ; then
- ./posbox_download_images.sh
+if ! file_exists *raspbian*.img ; then
+ wget 'http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-09-30/2019-09-26-raspbian-buster-lite.zip' -O raspbian.img.zip
+ unzip raspbian.img.zip
fi
cp -a *raspbian*.img posbox.img
@@ -84,8 +84,12 @@ START_OF_ROOT_PARTITION=$(fdisk -l posbox.img | tail -n 1 | awk '{print $2}')
echo 'p'; # print
echo 'w') | fdisk posbox.img # write and quit
-LOOP_MAPPER_PATH=$(kpartx -avs posbox.img | tail -n 1 | cut -d ' ' -f 3)
+LOOP=$(kpartx -avs posbox.img)
+LOOP_MAPPER_PATH=$(echo "${LOOP}" | tail -n 1 | awk '{print $3}')
LOOP_MAPPER_PATH="/dev/mapper/${LOOP_MAPPER_PATH}"
+LOOP_MAPPER_BOOT=$(echo "${LOOP}" | tail -n 2 | awk 'NR==1 {print $3}')
+LOOP_MAPPER_BOOT="/dev/mapper/${LOOP_MAPPER_BOOT}"
+
sleep 5
# resize filesystem
@@ -94,30 +98,19 @@ resize2fs "${LOOP_MAPPER_PATH}"
mkdir -p "${MOUNT_POINT}" #-p: no error if existing
mount "${LOOP_MAPPER_PATH}" "${MOUNT_POINT}"
+mount "${LOOP_MAPPER_BOOT}" "${MOUNT_POINT}/boot/"
+
+QEMU_ARM_STATIC="/usr/bin/qemu-arm-static"
+cp "${QEMU_ARM_STATIC}" "${MOUNT_POINT}/usr/bin/"
# 'overlay' the overwrite directory onto the mounted image filesystem
cp -a "${OVERWRITE_FILES_BEFORE_INIT_DIR}"/* "${MOUNT_POINT}"
+chroot "${MOUNT_POINT}" /bin/bash -c "sudo /etc/init_posbox_image.sh"
# get rid of the git clone
rm -rf "${CLONE_DIR}"
# and the ngrok usr/bin
rm -rf "${OVERWRITE_FILES_BEFORE_INIT_DIR}/usr"
-
-# get rid of the mount, we have to remount it anyway because we have
-# to "refresh" the filesystem after qemu modified it
-sleep 2
-umount "${MOUNT_POINT}"
-
-# from http://paulscott.co.za/blog/full-raspberry-pi-raspbian-emulation-with-qemu/
-# ssh pi@localhost -p10022
-# as of stretch with newer kernels, the versatile-pb.dtb file is necessary
-QEMU_OPTS=(-kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -dtb versatile-pb.dtb -no-reboot -serial stdio -append 'root=/dev/sda2 rootfstype=ext4 rw' -hda posbox.img -net user,hostfwd=tcp::10022-:22,hostfwd=tcp::18069-:8069 -net nic)
-if [ -z ${DISPLAY:-} ] ; then
- QEMU_OPTS+=(-nographic)
-fi
-qemu-system-arm "${QEMU_OPTS[@]}"
-
-mount "${LOOP_MAPPER_PATH}" "${MOUNT_POINT}"
cp -av "${OVERWRITE_FILES_AFTER_INIT_DIR}"/* "${MOUNT_POINT}"
find "${MOUNT_POINT}"/ -type f -name "*.iotpatch"|while read iotpatch; do
@@ -129,11 +122,11 @@ find "${MOUNT_POINT}"/ -type f -name "*.iotpatch"|while read iotpatch; do
done
# cleanup
-sleep 2
-umount "${MOUNT_POINT}"
-rm -r "${MOUNT_POINT}"
+umount -f "${MOUNT_POINT}"/boot
+umount -f "${MOUNT_POINT}"
echo "Running zerofree..."
zerofree -v "${LOOP_MAPPER_PATH}" || true
kpartx -d posbox.img
+rm -rf "${MOUNT_POINT}"
diff --git a/addons/point_of_sale/tools/posbox/posbox_download_images.sh b/addons/point_of_sale/tools/posbox/posbox_download_images.sh
deleted file mode 100755
index e810d0f9133..00000000000
--- a/addons/point_of_sale/tools/posbox/posbox_download_images.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-wget 'http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2019-09-30/2019-09-26-raspbian-buster-lite.zip' -O raspbian.img.zip
-unzip raspbian.img.zip
-wget 'https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.14.79-stretch' -O kernel-qemu
-wget 'https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/versatile-pb.dtb'
-