YBD

If you want to build Baserock definitions on other Linux systems or in the cloud, take a look at ybd.

ybd is a re-implementation of the core build and deploy functionality from morph, designed to run with minimal dependencies on other operating systems. Although it is relatively new, ybd can build and deploy most of the baserock definitions, and it is faster than morph for some use-cases.

Note that first time through ybd needs to clone a lot of git repos, which can take quite a long time. And building a whole system can take a lot of time too. If you use current definitions there is an ?artifact cache which can speed up the initial build dramatically.

The recommended 'version' of ybd at any given time is the latest release tag at http://gitlab.com/baserock/ybd

Getting Started with ybd and Vagrant

After installing vagrant from http://www.vagrantup.com/downloads

git clone https://gitlab.com/baserock/ybd.git
cd ybd
vagrant up
vagrant ssh

# and in the vagrant box
sudo -i
cd /src/definitions
/src/ybd/ybd.py systems/build-system-x86_64.morph x86_64

Getting Started with ybd on AWS

# Get dependencies
yum install make automake gcc gcc-c++ kernel-devel git gawk python-pip
pip install fs pyyaml sandboxlib jsonschema requests

# Get ybd
git clone https://gitlab.com/baserock/ybd.git    
# edit ybd/ybd.conf and set base: '/src'
# if your machine is big enough, ybd can be configured to run parallel instances,
# by setting instances: to int(cores/8)

# Get definitions
git clone git://git.baserock.org/baserock/baserock/definitions
cd definitions

# run ybd
../ybd/ybd.py systems/build-system-x86_64.morph x86_64

Getting Started with ybd on Scaleway

# Choose a Fedora image (we could not get stock Ubuntu to work)
# then after ssh root@your.ip.address
dnf install which make automake gcc gcc-c++ gawk git m4
# add extra volume for /src
mkfs -t ext4 /dev/nbd1
mkdir /src
mount /dev/nbd1 /src

# optionally add swap
# mkswap /dev/nbd2
# swapon /dev/nbd2

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py    
pip install fs pyyaml sandboxlib jsonschema requests bottle

cd /src
git clone https://gitlab.com/baserock/ybd.git
git clone git://git.baserock.org/baserock/baserock/definitions
echo "base: /src" > ybd/ybd.conf

cd definitions
../ybd/ybd.py systems/genivi-baseline-system-armv7lhf-jetson armv7lhf


# Debian, Ubuntu - unfortunately this doesn't work for Baserock definitions.
# some thumb compiler bug
# apt-get update; apt-get install build-essential gawk git m4

Getting Started with ybd on DataCentred ARM Cloud (ARMv8)

# Ubuntu
apt-get update; apt-get install build-essential gawk git m4

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py    
pip install fs pyyaml sandboxlib jsonschema requests bottle

mkdir /src
cd /src
git clone https://gitlab.com/baserock/ybd.git
git clone git://git.baserock.org/baserock/baserock/definitions
echo "base: /src" > ybd/ybd.conf

cd definitions
/src/ybd/ybd.py systems/devel-system-armv8l64.morph armv8l64

Getting Started with ybd on DataCentred ARM Cloud (ARMv7)

These instructions are based on James Thomas' original instructions to create a chroot.

# as root...
wget http://download.baserock.org/baserock/baserock-current-build-system-armv7lhf-jetson.img.gz
gunzip baserock-current-build-system-armv7lhf-jetson.img.gz
mkdir -p /src/armv7chroot
mount ./baserock-current-build-system-armv7lhf-jetson.img /mnt
cp -r /mnt/systems/default/run/* /src/armv7chroot
# linux-user-chroot mounts don't seem to work here, so let's use chroot....
mv /src/armv7chroot/usr/bin/linux-user-chroot /src/armv7chroot/usr/bin/linux-user-chroot.gone
#

Put the following into a new file /src/armv7chroot/launch.sh

#!/bin/bash
cd /src/armv7chroot
cp /etc/resolv.conf etc/
mount -o bind /dev dev/
mount -o bind /proc proc/
mount --bind . . && chroot . /bin/sh

Now launch it with linux32

chmod +x /src/armv7chroot/launch.sh
/usr/bin/linux32 -B /src/armv7chroot/launch.sh

Then in the chroot you can do 'normal' ybd setup...

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py    
pip install ps pyyaml sandboxlib jsonschema requests bottle
#

mkdir /src
cd /src
git clone https://gitlab.com/baserock/ybd.git
git clone git://git.baserock.org/baserock/baserock/definitions
echo "base: /src" > ybd/ybd.conf
/src/ybd/ybd.py systems/build-system-armv7lhf-jetson.morph
#

Artifact cache

There is a cache of ybd built artifacts for x86_64 and ARMv7 systems at http://artifacts1.baserock.org:8000/*

Downloading artifacts can be much faster than building them for some situations so if you want to use the artifact cache, do the following:

echo "kbas-url: http://artifacts1.baserock.org:8000/" >> /src/ybd/ybd.conf