Creating an Update Daemon for SUSI Smart Speaker

A daemon in reference of operating systems is a computer program that runs as a background process rather than under direct control of the user. Various daemons are being used in SUSI smart speaker. The following daemons have been created Update Daemon Media Discovery Daemon Factory Reset Daemon  In this blog, we’ll be discussing the implementation of the Update Daemon in SUSI.AI Update Daemon Due to the ever-growing coding community, it is needed to provide regular updates to the smart speaker and keep it in sync with the latest technology. Hence an Update Daemon was required that could fetch updates at a regular interval. The Updated Daemon was implemented in the following steps 1.Deciding the Update Interval How frequently should we check for updates was the first question that was tackled while implementing this daemon. We decided that we should check for Update, every time the Raspberry Pi starts and an internet connection was available. 2. Implementing The Decision To start the Update script every time the Raspberry Pi starts, we decided to create Systemd rules. [Unit] Description=Update Check- SUSI Linux Wants=network-online.target After=network-online.target [Service] Type=oneshot ExecStart=/home/pi/SUSI.AI/susi_linux/update_daemon/update_check.sh [Install] WantedBy=multi-user.target The above rule waits for a network connection to be established with the Raspberry Pi and then triggers a bash script that fetches updates 3. Fetching The Updates Now, a bash script was prepared that would fetch the latest changes from the online repo and merge the latest changes in the local repo   #!/bin/sh UPSTREAM=${1:-'@{u}'} LOCAL=$(git rev-parse @) REMOTE=$(git rev-parse "$UPSTREAM") BASE=$(git merge-base @ "$UPSTREAM") CHECK='' if [ $LOCAL = $REMOTE ] then    echo "Up-to-date"    CHECK='up-to-date' elif [ $LOCAL = $BASE ] then    echo "Need to pull"    CHECK=”Need-to-pull” else    echo "Diverged" fi if [$CHECK = "Need-to-pull"] then    git fetch UPSTREAM    git merge UPSTREAM/master fi   Resources https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-unit_files https://github.com/fossasia/susi_linux https://github.com/fossasia/susi_server Tags   susi.ai, gsoc, gsoc’18, fossasia, update, daemon, update_daemon, smart speaker, systemd, hardware

Continue ReadingCreating an Update Daemon for SUSI Smart Speaker

apt-get update in building Meilix through Travis

Meilix uses Travis to build and then make a github release of the ISO. There are packages that get built in the script executed by Travis. What problem it is solving? It's the need of apt-get update which are: Update of the system to support for the newest builds. Adding of the repo after adding a Personal Package Archives ('PPAs') By default, Travis disabled apt-get update for every build. So if we want to run it automatically for each build, we can do it in two different ways. Way 1:Running apt-get update in before_install step. Implementation in .travis.yml of Meilix print 'hello world!' sudo: required before_install: - apt-get update   We already used sudo so there is no need to use sudo in the apt-get update. This is the most simplistic approach and it update the system packages and source list before installing any packages. Way 2: executing apt-get update in Travis through APT addon. The addon comes under the include step and the lint follows this order: include: - os: linux addons: apt: update: true sources: - ubuntu-toolchain-r-test packages: - debootstrap - genisoimage - p7zip-full - squashfs-tools - ubuntu-dev-tools - dpkg-dev - debhelper - fakeroot - devscripts   This is helpful in case when we don’t have the before_install step. Additionally, it allows us to specify the packages we need to install. Choosing between the two options One can adopt any of the above process to implement apt-update in Travis. Meilix uses the second approach as because we don’t have before_install parameter. Sometimes we need some commands to get executed before updating the system, so in that case we prefer before_install to prioritize the tasks. Resources:   Travis lint Travis installing dependencies Ubuntu LaunchPad - Personal Package Archives ('PPAs')  

Continue Readingapt-get update in building Meilix through Travis