Skip to content

groeck/linux-build-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Repositories and packages
-------------------------

README in the qemu directory describes distribution.

----

Packages to install (Debian/Ubuntu):

automake
autoconf
autotools-dev
bc
bison
build-essential
coccinelle
device-tree-compiler
flex
genext2fs
nfs-client
fakeroot
git
git-email
initramfs-tools
libcacard0
libcacard-dev
libglib2.0-dev
libgtk-3-dev
libisl15
libssh2-1
libssh2-1-dev
libcurl3
libcurl4-openssl-dev
libiscsi-dev
libpixman-1-dev
libssl-dev
libxml2-dev
lzop
module-init-tools
qemu-system
qemu-user
qemu-utils
rsync
u-boot-tools
virtualenv

libaudit-dev
libunwind-dev
python-dev
libiberty-dev
liblzma-dev
libnuma-dev
libperl-dev
systemtap-sdt-dev
libdw-dev
libslang2-dev
libgtk2.0-dev
libgtk2.0-dev:i386 (for perf)
binutils-dev
libbabeltrace-dev
openjdk-8-jdk

For 32-bit compiler support:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386

---

swtpm:

Install libjson-glib-dev, expect
Clone and install libtpms (https://github.com/stefanberger/libtpms.git)
Clone and install swtpm (https://github.com/stefanberger/swtpm.git)

---

Install on new builder:

- install all packages listed above
- Run bin/distribute.sh to new builder
- Run
	rsync -l --timeout=15 -r /opt/kernel <builder>:/opt/kernel
- Run
	cd /opt/buildbot
	bin/buildslave.sh create-slave <basedir> <master> <name> <passwd>


----

Ubuntu pre 14.04:
	ia32-libs
Ubuntu 14.04:
	lib32z1 lib32ncurses5 lib32bz2-1.0

make sure /bin/sh points to bash.

sudo update-alternatives --install /bin/sh sh /bin/bash 99

----

Hacks when running Ubuntu 18.04 with qemu/gcc compiled on Ubuntu 16.04:

cd /usr/lib
sudo ln -s libmpfr.so libmpfr.so.4
cd /usr/lib/x86_64-linux-gnu
sudo ln -s libiscsi.so libiscsi.so.2

Similar hacks will likely be needed for comparable situations.

---
genfatfs:

Clone from git@github.com:xobs/genfatfs.git.
Build and install into bin directory.

---
smatch:

Prerequisites:	libsqlite3-dev sqlite3 libsqlite3-0 libgtk2.0-dev

Either
	cd /opt/buildbot
	git clone git://repo.or.cz/smatch.git
or
	cd /opt/buildbot/smatch
	git pull

then:
make clean
make INSTALL_PREFIX=/opt/buildbot install

---
xtensa:

Same as above; buildroot 2014.08-rc3 is recommended.

Use qemu_xtensa_lx60_defconfig as starting base. Also enable
	BR2_TOOLCHAIN_BUILDROOT_LARGEFILE=y
	BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y
	BR2_TOOLCHAIN_BUILDROOT_INET_RPC=y
	BR2_TOOLCHAIN_BUILDROOT_WCHAR=y

Build commands:
	make qemu_xtensa_lx60_defconfig
	make menuconfig		# Add the above configuration flags
	make toolchain
	cd output
	mkdir xtensa
	mv host xtensa/gcc-4.8.3-dc232b
	tar czf /tmp/x86_64-gcc-4.8.3-dc232b-uclibc_xtensa-linux.tar.gz xtensa

gcc 4.6.3 from kernel.org is not recommended and may fail randomly
with 'jump target out of range' errors. Also, it won't let you run
the qemu target. Note that you _must_ use the same toolchain for both
kernel and rootfs builds.

---
Microblaze

[ tested with tip of buildroot tree as of 8/23/2014 ]
Big endian, gcc 4.9.1, glibc 2.19, binutils 2.24
4.4 kernel headers

	make toolchain
	cd output
	mkdir microblaze
	mv host microblaze/gcc-4.9.1
	tar czf /tmp/x86_64-gcc-4.9.1-glibc_microblaze-linux.tar.gz microblaze

---
qemu

Local patches are required. See groeck/qemu repository at kernel.org.
Look for local branches.

Packages needed to build:
	libglib2.0-dev
	libssh2-1-dev
	libcurl4-openssl-dev
	libiscsi-dev
	libslirp-dev
	autoconf
	libpixman-1-dev
	ninja-build

Build:

See qemu/buildall.sh

---
buildroot general configuration, when building root file systems:

Toolchain
   4.4 kernel headers (or whatever the minimum required kernel version is)
   Recent binutils/gcc

System configuration
  Enable:
    Run a getty (login prompt) after boot
  then
    Run test scripts
      Shutdown command to use: Either reboot or poweroff, depending on HW
  Network interface to configure through DHCP: eth0
Filesystem images
  Disable:
    tar
  Enable:
    cpio, gzip compression
    ext2/3/4, 16MB, gzip compression
    iso
    squashfs, gzip compression
    evtl btrfs if you like, but needs large image size (100m ?)


---
buildbot

Requires the following patch.

To install,
- clone and checkout buildbot source
- select base version (branch)
- apply the patch
- If you have a local installation from source, install the result
- Otherwise, loook for web/base.py in the distribution directory.
  Example: Ubuntu Trusty (14.04)
    File is in /usr/lib/python2.7/dist-packages/buildbot/status/web/base.py
  Installation commands:
    cd <installdir>
    sudo mv base.py base.py.orig
    sudo mv base.pyc base.pyc.orig
    sudo cp <src>/master/buildbot/status/web/base.py .
    Optional:
    sudo python
    >>> import py_compile
    >>> py_compile.compile('base.py')
    >>> exit()

From 8a0af9a95cfedbecd090132c6637792cbc6530ff Mon Sep 17 00:00:00 2001
From: Guenter Roeck <linux@roeck-us.net>
Date: Sun, 15 Jun 2014 08:23:20 -0700
Subject: [PATCH] Add split and regex_replace to Jinja filters

Used for more complex expressions on buildbot 'builders' page.

Also enable do and loopcontrols extensions.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
 master/buildbot/status/web/base.py | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/master/buildbot/status/web/base.py b/master/buildbot/status/web/base.py
index 24a4b8e..0eff637 100644
--- a/master/buildbot/status/web/base.py
+++ b/master/buildbot/status/web/base.py
@@ -14,7 +14,7 @@
 # Copyright Buildbot Team Members
 
 
-import urlparse, urllib, time, re
+import urlparse, urllib, time, re, string
 import os, cgi, sys, locale
 import jinja2
 from zope.interface import Interface
@@ -510,7 +510,7 @@ def createJinjaEnv(revlink=None, changecommentlink=None,
     loader = jinja2.ChoiceLoader(all_loaders)
 
     env = jinja2.Environment(loader=loader,
-                             extensions=['jinja2.ext.i18n'],
+                             extensions=['jinja2.ext.i18n', 'jinja2.ext.do', 'jinja2.ext.loopcontrols'],
                              trim_blocks=True,
                              undefined=AlmostStrictUndefined)
 
@@ -519,6 +519,8 @@ def createJinjaEnv(revlink=None, changecommentlink=None,
     env.tests['mapping'] = lambda obj : isinstance(obj, dict)
 
     env.filters.update(dict(
+        split = split,
+        regex_replace = regex_replace,
         urlencode = urllib.quote,
         email = emailfilter,
         user = userfilter,
@@ -531,6 +533,12 @@ def createJinjaEnv(revlink=None, changecommentlink=None,
 
     return env
 
+def split(s, sep):
+    return string.split(s, sep)
+
+def regex_replace(s, find, replace):
+    return re.sub(find, replace, s)
+
 def emailfilter(value):
     ''' Escape & obfuscate e-mail addresses
 
-- 
1.9.1