diff options
| author | Josse Colpaert <jco@odoo.com> | 2018-07-06 12:37:55 +0200 |
|---|---|---|
| committer | Josse Colpaert <jco@odoo.com> | 2018-07-13 15:10:12 +0200 |
| commit | 7d34f0218bf4ee04939e30c6101fb85323fccb71 (patch) | |
| tree | f90efefd436631daac531b08129941cde8b35412 /addons | |
| parent | e8821f0519873713ba477b2c013cb0a645e6e559 (diff) | |
[IMP] point_of_sale: posbox upgrade to stretch / python3
- transform odoo.py -> odoo-bin / recent branches + pip3 packages
- deactivate wpa_supplicant when starting dhcpcd automatically
- postgresql create clusters manually
- latest stretch raspbian image / add versatile-db.ptb for kernel-qemu
- ifconfig output change
- upgrade hw_-modules:
hw_escpos: to python3
hw_posbox_homepage: to v11: csrf does not work as it needs a database
hw_posbox_upgrade: to python3 decode utf-8
hw_scale: to python3
hw_proxy: to python3
With the commit, the posbox will also work on the new Raspberry Pi 3b+
Diffstat (limited to 'addons')
14 files changed, 99 insertions, 75 deletions
diff --git a/addons/hw_escpos/controllers/main.py b/addons/hw_escpos/controllers/main.py index fa57b18501e..805d8388a8a 100644 --- a/addons/hw_escpos/controllers/main.py +++ b/addons/hw_escpos/controllers/main.py @@ -8,6 +8,7 @@ import os import os.path import subprocess import time +import netifaces as ni import traceback try: @@ -29,9 +30,10 @@ except ImportError: usb = None from odoo import http, _ - from odoo.addons.hw_proxy.controllers import main as hw_proxy +from uuid import getnode as get_mac + _logger = logging.getLogger(__name__) # workaround https://bugs.launchpad.net/openobject-server/+bug/947231 @@ -196,10 +198,18 @@ class EscposDriver(Thread): def print_status(self,eprint): localips = ['0.0.0.0','127.0.0.1','127.0.1.1'] hosting_ap = os.system('pgrep hostapd') == 0 - ssid = subprocess.check_output('iwconfig 2>&1 | grep \'ESSID:"\' | sed \'s/.*"\\(.*\\)"/\\1/\'', shell=True).rstrip() - mac = subprocess.check_output('ifconfig | grep -B 1 \'inet addr\' | grep -o \'HWaddr .*\' | sed \'s/HWaddr //\'', shell=True).rstrip() - ips = [ c.split(':')[1].split(' ')[0] for c in subprocess.check_output("/sbin/ifconfig").split('\n') if 'inet addr' in c ] - ips = [ ip for ip in ips if ip not in localips ] + ssid = subprocess.check_output('iwconfig 2>&1 | grep \'ESSID:"\' | sed \'s/.*"\\(.*\\)"/\\1/\'', shell=True).decode('utf-8').rstrip() + mac = get_mac() + h = iter(hex(mac)[2:].zfill(12)) + mac = ":".join(i + next(h) for i in h) + interfaces = ni.interfaces() + ips = [] + for iface_id in interfaces: + iface_obj = ni.ifaddresses(iface_id) + ifconfigs = iface_obj.get(ni.AF_INET, []) + for conf in ifconfigs: + if conf.get('addr'): + ips.append(conf.get('addr')) eprint.text('\n\n') eprint.set(align='center',type='b',height=2,width=2) eprint.text('PosBox Status\n') @@ -221,8 +231,10 @@ class EscposDriver(Thread): eprint.text(ip+'\n') if len(ips) >= 1: - eprint.text('\nMAC Address:\n' + mac + '\n') - eprint.text('\nHomepage:\nhttp://'+ips[0]+':8069\n') + ips_filtered = [i for i in ips if i != '127.0.0.1'] + main_ips = ips_filtered and ips_filtered[0] or '127.0.0.1' + eprint.text('\nMAC Address:\n' + str(mac) + '\n') + eprint.text('\nHomepage:\nhttp://' + main_ips + ':8069\n') eprint.text('\n\n') eprint.cut() diff --git a/addons/hw_escpos/escpos/escpos.py b/addons/hw_escpos/escpos/escpos.py index f31b1619894..28f02e9456f 100644 --- a/addons/hw_escpos/escpos/escpos.py +++ b/addons/hw_escpos/escpos/escpos.py @@ -7,6 +7,7 @@ import io import math import re import traceback +import codecs from hashlib import md5 from PIL import Image @@ -318,9 +319,9 @@ class Escpos: else: image_border = 32 - (size % 32) if (image_border % 2) == 0: - return (image_border / 2, image_border / 2) + return (int(image_border / 2), int(image_border / 2)) else: - return (image_border / 2, (image_border / 2) + 1) + return (int(image_border / 2), int((image_border / 2) + 1)) def _print_image(self, line, size): """ Print formatted image """ @@ -330,8 +331,8 @@ class Escpos: self._raw(S_RASTER_N) - buffer = "%02X%02X%02X%02X" % (((size[0]/size[1])/8), 0, size[1], 0) - self._raw(buffer.decode('hex')) + buffer = b"%02X%02X%02X%02X" % (int((size[0]/size[1])/8), 0, size[1], 0) + self._raw(codecs.decode(buffer, 'hex')) buffer = "" while i < len(line): @@ -340,7 +341,7 @@ class Escpos: i += 8 cont += 1 if cont % 4 == 0: - self._raw(buffer.decode("hex")) + self._raw(codecs.decode(buffer, "hex")) buffer = "" cont = 0 @@ -349,7 +350,7 @@ class Escpos: i = 0 cont = 0 buffer = "" - raw = "" + raw = b"" def __raw(string): if output: @@ -358,8 +359,8 @@ class Escpos: self._raw(string) raw += S_RASTER_N - buffer = "%02X%02X%02X%02X" % (((size[0]/size[1])/8), 0, size[1], 0) - raw += buffer.decode('hex') + buffer = "%02X%02X%02X%02X" % (int((size[0]/size[1])/8), 0, size[1], 0) + raw += codecs.decode(buffer, 'hex') buffer = "" while i < len(line): @@ -368,7 +369,7 @@ class Escpos: i += 8 cont += 1 if cont % 4 == 0: - raw += buffer.decode("hex") + raw += codecs.decode(buffer, 'hex') buffer = "" cont = 0 @@ -433,14 +434,14 @@ class Escpos: print('print_b64_img') - id = md5(img.encode('utf-8')).digest() + id = md5(img).digest() if id not in self.img_cache: print('not in cache') - img = img[img.find(',')+1:] - f = io.BytesIO('img') - f.write(base64.decodestring(img)) + img = img[img.find(b',')+1:] + f = io.BytesIO(b'img') + f.write(base64.decodebytes(img)) f.seek(0) img_rgba = Image.open(f) img = Image.new('RGB', img_rgba.size, (255,255,255)) @@ -677,7 +678,7 @@ class Escpos: elif elem.tag == 'img': if 'src' in elem.attrib and 'data:' in elem.attrib['src']: - self.print_base64_image(elem.attrib['src']) + self.print_base64_image(bytes(elem.attrib['src'], 'utf-8')) elif elem.tag == 'barcode' and 'encoding' in elem.attrib: serializer.start_block(stylestack) @@ -797,19 +798,19 @@ class Escpos: (encoding, _) = remaining.popitem() else: encoding = 'cp437' - encoded = '\xb1' # could not encode, output error character + encoded = b'\xb1' # could not encode, output error character break; if encoding != self.encoding: # if the encoding changed, remember it and prefix the character with # the esc-pos encoding change sequence self.encoding = encoding - encoded = encodings[encoding] + encoded + encoded = bytes(encodings[encoding], 'utf-8') + encoded return encoded def encode_str(txt): - buffer = '' + buffer = b'' for c in txt: buffer += encode_char(c) return buffer diff --git a/addons/hw_posbox_homepage/controllers/main.py b/addons/hw_posbox_homepage/controllers/main.py index 73ce2a70a13..66c63ba01aa 100644 --- a/addons/hw_posbox_homepage/controllers/main.py +++ b/addons/hw_posbox_homepage/controllers/main.py @@ -161,7 +161,7 @@ class PosboxHomepage(odoo.addons.web.controllers.main.Home): """ return wifi_template - @http.route('/wifi_connect', type='http', auth='none', cors='*') + @http.route('/wifi_connect', type='http', auth='none', cors='*', csrf=False) def connect_to_wifi(self, essid, password, persistent=False): if persistent: persistent = "1" @@ -171,7 +171,7 @@ class PosboxHomepage(odoo.addons.web.controllers.main.Home): subprocess.call(['/home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh', essid, password, persistent]) return "connecting to " + essid - @http.route('/wifi_clear', type='http', auth='none', cors='*') + @http.route('/wifi_clear', type='http', auth='none', cors='*', csrf=False) def clear_wifi_configuration(self): os.system('/home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/clear_wifi_configuration.sh') return "configuration cleared" @@ -244,7 +244,7 @@ class PosboxHomepage(odoo.addons.web.controllers.main.Home): """ return ngrok_template - @http.route('/enable_ngrok', type='http', auth='none', cors='*') + @http.route('/enable_ngrok', type='http', auth='none', cors='*', csrf=False) def enable_ngrok(self, auth_token): if subprocess.call(['pgrep', 'ngrok']) == 1: subprocess.Popen(['ngrok', 'tcp', '-authtoken', auth_token, '-log', '/tmp/ngrok.log', '22']) diff --git a/addons/hw_posbox_upgrade/controllers/main.py b/addons/hw_posbox_upgrade/controllers/main.py index b863afdf318..f71dcca2f60 100644 --- a/addons/hw_posbox_upgrade/controllers/main.py +++ b/addons/hw_posbox_upgrade/controllers/main.py @@ -80,7 +80,7 @@ upgrade_template = """ </p> <pre> """ -upgrade_template += subprocess.check_output("git --work-tree=/home/pi/odoo/ --git-dir=/home/pi/odoo/.git log -1", shell=True).replace("\n", "<br/>") +upgrade_template += subprocess.check_output("git --work-tree=/home/pi/odoo/ --git-dir=/home/pi/odoo/.git log -1", shell=True).decode('utf-8').replace("\n", "<br/>") upgrade_template += """ </pre> <div class='centering'> diff --git a/addons/hw_proxy/controllers/main.py b/addons/hw_proxy/controllers/main.py index 3d42918c2ad..31d718616e4 100644 --- a/addons/hw_proxy/controllers/main.py +++ b/addons/hw_proxy/controllers/main.py @@ -21,6 +21,8 @@ BANNED_DEVICES = { "0424:9514", # Standard Microsystem Corp. Builtin Ethernet module "1d6b:0002", # Linux Foundation 2.0 root hub "0424:ec00", # Standard Microsystem Corp. Other Builtin Ethernet module + "0424:2514", # Standard Microsystems Corp. USB 2.0 Hub (rpi3b+) + "0424:7800", # Standard Microsystems Corp. (rpi3b+) } @@ -100,15 +102,16 @@ class Proxy(http.Controller): """ if debug is None: resp += """(<a href="/hw_proxy/status?debug">debug version</a>)""" - devices = subprocess.check_output("lsusb").split('\n') + devices = subprocess.check_output("lsusb").decode('utf-8').split('\n') count = 0 resp += "<div class='devices'>\n" for device in devices: device_name = device[device.find('ID')+2:] - device_id = device_name.split()[0] - if not (device_id in BANNED_DEVICES): - resp += "<div class='device' data-device='"+device+"'>"+device_name+"</div>\n" - count += 1 + if device_name: # to avoid last empty line + device_id = device_name.split()[0] + if not (device_id in BANNED_DEVICES): + resp += "<div class='device' data-device='"+device+"'>"+device_name+"</div>\n" + count += 1 if count == 0: resp += "<div class='device'>No USB Device Found</div>" @@ -124,7 +127,7 @@ class Proxy(http.Controller): %s </pre> - """ % subprocess.check_output('lsusb -v', shell=True) + """ % subprocess.check_output('lsusb -v', shell=True).decode('utf-8') return request.make_response(resp,{ 'Cache-Control': 'no-cache', diff --git a/addons/hw_scale/controllers/main.py b/addons/hw_scale/controllers/main.py index 090e6193fe6..162ab7a866d 100644 --- a/addons/hw_scale/controllers/main.py +++ b/addons/hw_scale/controllers/main.py @@ -28,7 +28,7 @@ except ImportError: def _toledo8217StatusParse(status): """ Parse a scale's status, returning a `(weight, weight_info)` pair. """ weight, weight_info = None, None - stat = ord(status[status.index('?') + 1]) + stat = status[status.index(b'?') + 1] if stat == 0: weight_info = 'ok' else: @@ -68,17 +68,17 @@ Toledo8217Protocol = ScaleProtocol( parity=serial.PARITY_EVEN, timeout=1, writeTimeout=1, - weightRegexp="\x02\\s*([0-9.]+)N?\\r", - statusRegexp="\x02\\s*(\\?.)\\r", + weightRegexp=b"\x02\\s*([0-9.]+)N?\\r", + statusRegexp=b"\x02\\s*(\\?.)\\r", statusParse=_toledo8217StatusParse, commandDelay=0.2, weightDelay=0.5, newWeightDelay=0.2, - commandTerminator='', - weightCommand='W', - zeroCommand='Z', - tareCommand='T', - clearCommand='C', + commandTerminator=b'', + weightCommand=b'W', + zeroCommand=b'Z', + tareCommand=b'T', + clearCommand=b'C', emptyAnswerValid=False, autoResetWeight=False, ) @@ -98,15 +98,15 @@ ADAMEquipmentProtocol = ScaleProtocol( weightRegexp=r"\s*([0-9.]+)kg", # LABEL format 3 + KG in the scale settings, but Label 1/2 should work statusRegexp=None, statusParse=None, - commandTerminator="\r\n", + commandTerminator=b"\r\n", commandDelay=0.2, weightDelay=0.5, newWeightDelay=5, # AZExtra beeps every time you ask for a weight that was previously returned! # Adding an extra delay gives the operator a chance to remove the products # before the scale starts beeping. Could not find a way to disable the beeps. - weightCommand='P', - zeroCommand='Z', - tareCommand='T', + weightCommand=b'P', + zeroCommand=b'Z', + tareCommand=b'T', clearCommand=None, # No clear command -> Tare again emptyAnswerValid=True, # AZExtra does not answer unless a new non-zero weight has been detected autoResetWeight=True, # AZExtra will not return 0 after removing products @@ -165,8 +165,8 @@ class Scale(Thread): if not char: break else: - answer.append(char) - return ''.join(answer) + answer.append(bytes(char)) + return b''.join(answer) def _parse_weight_answer(self, protocol, answer): """ Parse a scale's answer to a weighing request, returning diff --git a/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh b/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh index 681732ae714..8f2d6b567cc 100755 --- a/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh +++ b/addons/point_of_sale/tools/posbox/configuration/connect_to_wifi.sh @@ -48,14 +48,18 @@ function connect () { if [ -z "${PASSWORD}" ] ; then sudo iwconfig wlan0 essid "${ESSID}" else - sudo wpa_passphrase "${ESSID}" "${PASSWORD}" > "${WPA_PASS_FILE}" + # Necessary in stretch: https://www.raspberrypi.org/forums/viewtopic.php?t=196927 + sudo cp /etc/wpa_supplicant/wpa_supplicant.conf "${WPA_PASS_FILE}" + chmod 777 ${WPA_PASS_FILE} + sudo wpa_passphrase "${ESSID}" "${PASSWORD}" >> "${WPA_PASS_FILE}" sudo wpa_supplicant -B -i wlan0 -c "${WPA_PASS_FILE}" fi + sudo systemctl daemon-reload sudo service dhcpcd restart # give dhcp some time - timeout 30 sh -c 'until ifconfig wlan0 | grep "inet addr:" ; do sleep 0.1 ; done' + timeout 30 sh -c 'until ifconfig wlan0 | grep "inet " ; do sleep 0.1 ; done' TIMEOUT_RETURN=$? if [ ${TIMEOUT_RETURN} -eq 124 ] && [ -z "${NO_AP}" ] ; then diff --git a/addons/point_of_sale/tools/posbox/configuration/keep_wifi_alive.sh b/addons/point_of_sale/tools/posbox/configuration/keep_wifi_alive.sh index a04aba620d4..5c8a27492bb 100755 --- a/addons/point_of_sale/tools/posbox/configuration/keep_wifi_alive.sh +++ b/addons/point_of_sale/tools/posbox/configuration/keep_wifi_alive.sh @@ -2,7 +2,7 @@ CURRENT_WIFI_NETWORK_FILE="/tmp/current_wifi_network.txt" while true ; do - if [ -z "$(cat <(ifconfig eth0) <(ifconfig wlan0) | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}';)" ] ; then + if [ -z "$(cat <(ifconfig eth0) <(ifconfig wlan0) | grep "inet ";)" ] ; then ESSID=$(head -n 1 "${CURRENT_WIFI_NETWORK_FILE}" | tr -d '\n') PASSWORD=$(tail -n 1 "${CURRENT_WIFI_NETWORK_FILE}" | tr -d '\n') diff --git a/addons/point_of_sale/tools/posbox/configuration/wireless_ap.sh b/addons/point_of_sale/tools/posbox/configuration/wireless_ap.sh index 97b011b296d..b925dc05cae 100755 --- a/addons/point_of_sale/tools/posbox/configuration/wireless_ap.sh +++ b/addons/point_of_sale/tools/posbox/configuration/wireless_ap.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash FORCE_HOST_AP="${1}" -WIRED_IP=$(ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}';) +WIRED_IP=$(python3 -c "import netifaces as ni; print(ni.ifaddresses('eth0').get(ni.AF_INET) and ni.ifaddresses('eth0')[ni.AF_INET][0]['addr'] or '')") WIFI_NETWORK_FILE="/home/pi/wifi_network.txt" # if there is no wired ip, attempt to start an AP through wireless interface diff --git a/addons/point_of_sale/tools/posbox/overwrite_after_init/etc/dhcpcd.conf b/addons/point_of_sale/tools/posbox/overwrite_after_init/etc/dhcpcd.conf index 00a1d04f28f..22698cb46ba 100644 --- a/addons/point_of_sale/tools/posbox/overwrite_after_init/etc/dhcpcd.conf +++ b/addons/point_of_sale/tools/posbox/overwrite_after_init/etc/dhcpcd.conf @@ -39,6 +39,8 @@ slaac private # A hook script is provided to lookup the hostname if not set by the DHCP # server, but it should not be run by default. nohook lookup-hostname +# stretch: we do not want to start wpa_supplicant as our script starts wpa_supplicant itself +nohook wpa_supplicant # dhcpcd will assign zeroconf 169.254.*.* addresses when # it can't connect, which we don't want diff --git a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init.d/odoo b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init.d/odoo index 4ab50a456a1..8cd645c1557 100755 --- a/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init.d/odoo +++ b/addons/point_of_sale/tools/posbox/overwrite_before_init/etc/init.d/odoo @@ -14,7 +14,7 @@ . /lib/lsb/init-functions PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin -DAEMON=/home/pi/odoo/odoo.py +DAEMON=/home/pi/odoo/odoo-bin NAME=odoo DESC=odoo CONFIG=/home/pi/odoo/addons/point_of_sale/tools/posbox/configuration/odoo.conf 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 38de23ca312..07e5a6d4c1d 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 @@ -21,11 +21,15 @@ apt-get update && apt-get -y upgrade # Do not be too fast to upgrade to more recent firmware and kernel than 4.38 # Firmware 4.44 seems to prevent the LED mechanism from working -PKGS_TO_INSTALL="adduser postgresql-client python python-dateutil python-decorator python-docutils python-feedparser python-imaging python-jinja2 python-ldap python-libxslt1 python-lxml python-mako python-mock python-passlib python-psutil python-psycopg2 python-pybabel python-pychart python-pydot python-pyparsing python-pypdf python-reportlab python-requests python-tz python-vatnumber python-vobject python-werkzeug python-xlwt python-yaml postgresql python-gevent python-serial python-pip python-dev localepurge vim mc mg screen iw hostapd isc-dhcp-server git rsync console-data lightdm xserver-xorg-video-fbdev xserver-xorg-input-evdev iceweasel xdotool unclutter x11-utils openbox python-netifaces rpi-update" - +PKGS_TO_INSTALL="adduser postgresql python3 python3-dateutil python3-decorator python3-docutils python3-feedparser python3-pil python3-jinja2 python3-ldap3 python3-lxml python3-mako python3-mock python3-openid python3-psutil python3-psycopg2 python3-babel python3-pydot python3-pyparsing python3-pypdf2 python3-reportlab python3-requests python3-simplejson python3-tz python3-vatnumber python3-werkzeug python3-yaml python3-serial python3-pip python3-dev localepurge vim mc mg screen iw hostapd isc-dhcp-server git rsync console-data lightdm xserver-xorg-video-fbdev xserver-xorg-input-evdev iceweasel xdotool unclutter x11-utils openbox python3-netifaces rpi-update python3-passlib python3-libsass python3-qrcode python3-html2text python3-unittest2 python3-simplejson" # KEEP OWN CONFIG FILES DURING PACKAGE CONFIGURATION # http://serverfault.com/questions/259226/automatically-keep-current-version-of-config-files-when-apt-get-install -apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --force-yes install ${PKGS_TO_INSTALL} +apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install ${PKGS_TO_INSTALL} +pg_lsclusters +systemctl start postgresql@9.6-main +systemctl status postgresql@9.6-main + +sudo -u postgres createuser -s pi apt-get clean localepurge @@ -34,23 +38,15 @@ rm -rf /usr/share/doc # python-usb in wheezy is too old # the latest pyusb from pip does not work either, usb.core.find() never returns # this may be fixed with libusb>2:1.0.11-1, but that's the most recent one in raspbian -# so we install the latest pyusb that works with this libusb -pip install pyusb==1.0.0b1 -pip install qrcode -pip install evdev -pip install simplejson -pip install unittest2 - -# --upgrade because websocket_client in wheezy is bad: -# https://github.com/docker/compose/issues/1288 -pip install --upgrade websocket_client +# so we install the latest pyusb that works with this libusb. +# Even in stretch, we had an error with langid (but worked otherwise) +pip3 install pyusb==1.0.0b1 +pip3 install evdev groupadd usbusers usermod -a -G usbusers pi usermod -a -G lp pi usermod -a -G input lightdm - -sudo -u postgres createuser -s pi mkdir /var/log/odoo chown pi:pi /var/log/odoo chown pi:pi -R /home/pi/odoo/ 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 ae3f52ceb55..1f2764628d8 100755 --- a/addons/point_of_sale/tools/posbox/posbox_create_image.sh +++ b/addons/point_of_sale/tools/posbox/posbox_create_image.sh @@ -28,6 +28,8 @@ __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=11.0 +REPO=https://github.com/odoo/odoo.git if [ ! -f kernel-qemu ] || ! file_exists *raspbian*.img ; then ./posbox_download_images.sh @@ -42,14 +44,14 @@ rm -rf "${CLONE_DIR}" if [ ! -d $CLONE_DIR ]; then echo "Clone Github repo" mkdir -p "${CLONE_DIR}" - git clone -b 8.0 --no-local --no-checkout --depth 1 https://github.com/odoo/odoo.git "${CLONE_DIR}" + git clone -b ${VERSION} --no-local --no-checkout --depth 1 ${REPO} "${CLONE_DIR}" cd "${CLONE_DIR}" git config core.sparsecheckout true echo "addons/web addons/hw_* addons/point_of_sale/tools/posbox/configuration -openerp/ -odoo.py" | tee --append .git/info/sparse-checkout > /dev/null +odoo/ +odoo-bin" | tee --append .git/info/sparse-checkout > /dev/null git read-tree -mu HEAD fi @@ -89,7 +91,7 @@ sleep 5 e2fsck -f "${LOOP_MAPPER_PATH}" # resize2fs requires clean fs resize2fs "${LOOP_MAPPER_PATH}" -mkdir "${MOUNT_POINT}" +mkdir -p "${MOUNT_POINT}" #-p: no error if existing mount "${LOOP_MAPPER_PATH}" "${MOUNT_POINT}" # 'overlay' the overwrite directory onto the mounted image filesystem @@ -107,7 +109,8 @@ umount "${MOUNT_POINT}" # from http://paulscott.co.za/blog/full-raspberry-pi-raspbian-emulation-with-qemu/ # ssh pi@localhost -p10022 -QEMU_OPTS=(-kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -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) +# 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 diff --git a/addons/point_of_sale/tools/posbox/posbox_download_images.sh b/addons/point_of_sale/tools/posbox/posbox_download_images.sh index 33beddac041..b13505ce16b 100755 --- a/addons/point_of_sale/tools/posbox/posbox_download_images.sh +++ b/addons/point_of_sale/tools/posbox/posbox_download_images.sh @@ -1,5 +1,8 @@ #!/bin/sh -wget 'http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2017-07-05/2017-07-05-raspbian-jessie-lite.zip' -O raspbian.img.zip +wget 'http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2018-06-29/2018-06-27-raspbian-stretch-lite.zip' -O raspbian.img.zip unzip raspbian.img.zip -wget 'https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.4.13-jessie' -O kernel-qemu +wget 'https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.9.59-stretch' -O kernel-qemu +wget 'https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/versatile-pb.dtb' + + |
