1. How to speed up mock

    Fedora and related distributions use “mock” to build packages. It creates chroot from “root cache” tarball, updates it, installs build dependencies and runs build. Similar to “pbuilder” under Debian. Whole build time can be long but there are some ways to get it faster.

    kill fsync()

    Everytime something calls “fsync()” storage slow downs because all writes need to be done. Build process goes in a chroot which will be removed at the end so why bother?

    Run “dnf install nosync” and then enable it in “/etc/mock/site-defaults.cfg” file:

    config_opts['nosync'] = True
    

    local cache for packages

    I do lot of builds. Often few builds of same package. And each build requires fetching of RPM packages from external repositories. So why not cache it?

    In LAN I have one machine working as NAS. One of services running there is “www cache” with 10GB space which I use only for fetching packages — both in mock and system and I use it on all machines. This way I can recreate build chroot without waiting for external repositories.

    config_opts['http_proxy'] = 'http://nas.lan:3128'
    

    Note that this also requires editing mock distribution config files to not use “mirrorlist=” but “baseurl=” instead so same server will be used each time. There is a script to convert mock configuration files if you go that way.

    decompress root cache

    Mock keeps tarball of base chroot contents which gets unpacked at start of build. By default it is gzip compressed and unpacking takes time. On my systems I switched off compression to gain a bit at cost of storage:

    config_opts['plugin_conf']['root_cache_opts']['compress_program'] = ""
    config_opts['plugin_conf']['root_cache_opts']['extension'] = ""
    

    tmpfs

    If memory is not an issue then tmpfs can be used for builds. Mock has own plugin for it but I do not use it. Instead I decide on my own about mounting “/var/lib/mock” as tmpfs or not. Why? I only have 16GB ram in pinkiepie so 8-12GB can be spent on tmpfs while there are packages which would not fit during build.

    parallel decompression

    Sources are compressed. Nowadays CPU has more than one core. So why not using it with multithreaded gzip/bzip2 depackers? This time distro file (like “/etc/mock/default.cfg” one) needs to be edited:

    config_opts['chroot_setup_cmd'] = 'install @buildsys-build /usr/bin/pigz /usr/bin/lbzip2'
    config_opts['macros']['%__gzip'] = '/usr/bin/pigz'
    config_opts['macros']['%__bzip2'] = '/usr/bin/lbzip2'
    

    extra mockchain tip

    For those who use “mockchain” a lot this shell snippet may help finding which packages failed:

    for dir in *
    do
        if [ -e $dir/fail ];then
            rm $dir/fail
            mv $dir _fail-$dir
        fi
    done
    

    summary

    With this set of changes I can do mock builds faster than before. Hope that it helps someone else too.

    Written by Marcin Juszkiewicz on
  2. Back @linaro.org

    Six years ago I was one of first members of project which later got “Linaro” name. Today I am back. But in different form.

    On 30th April 2010 I got email titled “Welcome to Linaro” and became software engineer at Linaro. Time shown that it was done in a way which helped to start project but was not liked by member companies. The plan was to leave in October 2012 but due to someone’s decision I stayed until May 2013.

    Today I got “Linaro Assignee On-Boarding” email which means that I am still officially software engineer at Red Hat but assigned to work at Linaro. Same as people from other member companies.

    I wonder will I get my unofficial title “main complainer at Linaro” back or do I have to deserve it again ;D

    Written by Marcin Juszkiewicz on
  3. Failed to set MokListRT: Invalid Parameter

    Somehow I managed to break UEFI environment on APM Mustang. As a result I was not able to enter boot manager menu nor UEFI shell. All I had was booting to 0001 boot entry (which was just installed Fedora 24 alpha).

    After reboot I scrolled a bit to take a look at firmware output:

    X-Gene Mustang Board
    Boot firmware (version 1.1.0 built at 14:50:19 on Oct 20 2015)
    PROGRESS CODE: V3020003 I0
    PROGRESS CODE: V3020002 I0
    PROGRESS CODE: V3020003 I0
    PROGRESS CODE: V3020002 I0
    PROGRESS CODE: V3020003 I0
    PROGRESS CODE: V3020002 I0
    PROGRESS CODE: V3020003 I0
    PROGRESS CODE: V3021001 I0
    TianoCore 1.1.0 UEFI 2.4.0 Oct 20 2015 14:49:32
    CPU: APM ARM 64-bit Potenza Rev A3 2400MHz PCP 2400MHz
         32 KB ICACHE, 32 KB DCACHE
         SOC 2000MHz IOBAXI 400MHz AXI 250MHz AHB 200MHz GFC 125MHz
    Board: X-Gene Mustang Board
    Slimpro FW:
            Ver: 2.4 (build 01.15.10.00 2015/04/22)
            PMD: 950 mV
            SOC: 950 mV
    Failed to set MokListRT: Invalid Parameter
    

    Here screen got cleared instantly and grub was shown. I booted into one of installed systems and started playing with EFI boot manager:

    17:38 root@pinkiepie-rawhide:~$ efibootmgr
    BootCurrent: 0001
    Timeout: 0 seconds
    BootOrder: 0001,0004,0000
    Boot0000  Fedora rawhide
    Boot0001* Fedora
    Boot0004* Red Hat Enterprise Linux
    

    Note “0 seconds” timeout. I changed it to 5s (efibootmgr -t 5), rebooted and UEFI menu appeared again:

    TianoCore 1.1.0 UEFI 2.4.0 Oct 20 2015 14:49:32
    CPU: APM ARM 64-bit Potenza Rev A3 2400MHz PCP 2400MHz
         32 KB ICACHE, 32 KB DCACHE
         SOC 2000MHz IOBAXI 400MHz AXI 250MHz AHB 200MHz GFC 125MHz
    Board: X-Gene Mustang Board
    Slimpro FW:
            Ver: 2.4 (build 01.15.10.00 2015/04/22)
            PMD: 950 mV
            SOC: 950 mV
    The default boot selection will start in   5 seconds
    [1] Fedora rawhide
    [2] Red Hat Enterprise Linux
    [3] Fedora
    [4] Shell
    [5] Boot Manager
    [6] Reboot
    [7] Shutdown
    Start:
    

    So I can boot whatever I want again ;D

    Written by Marcin Juszkiewicz on
  4. Why my device is not supported by distributions

    During weekend I was in Puck, Poland at small conference called “Zimowisko linuksowe” (Linux winter camp) where I had a talk called “Dlaczego moje urządzenie nie jest obsługiwane przez dystrybucje” (Why my device is not supported by distributions).

    In talk I presented how distributions (Debian, Fedora) handle ARM devices (one kernel for all, one image for all) and why it does not fit Raspberry/Pi or Chromebook. Also mentioned Roseapple/Pi as an example of how not to make support for device.

    There were questions about suggested boards (most of people knew Raspberry/Pi and one or two other by name) and ARM powered laptops other than Chromebooks.

    And then we went to celebrate birthdays of few friends who had them on same day.

    You can download presentation in Polish or English (translation was requested by few folks from IRC after I annouced that there will be such talk).

    Written by Marcin Juszkiewicz on
  5. Waiting for 96 boards with MIPS or Arduino?

    Linaro Connect in progress. Bubblegum 96 announced and present at 96boards website. But I am waiting for MIPS version…

    Why MIPS? Looking how earlier Consumer Edition 96 boards devices got released it looks to me that compliance to specification is optional. And as there is no information that cpu has to be ARM (“Design is SoC independent (targets 32 or 64 bit SoCs)”) so let make MIPS one.

    I thought about Atmega first but kernel support shall be provided and video output. On the other side — both (Linux kernel on AVR and video output) were already done in past on that platform so maybe it could be done.

    You can run any random kernel release, have own set of ugly patches for bootloader. And you will get “96 boards officially certified” stamp on it.

    In my opinion 96boards project should enforce “your SoC should have at least minimal support in linux-next kernel tree” rule before even looking at products. Actions Semi maybe is good in producing chips but looks like they have no idea how to take care of software.

    Written by Marcin Juszkiewicz on
  6. Cello: new AArch64 enterprise board from 96boards project

    Few hours ago, somewhere in some hotel in Bangkok Linaro Connect has started. So during morning coffee I watched keynote and noticed that Jon Masters presented RHELSA 7.2 out of the box experience on Huskyboard. And then brand new board from 96boards project was announced: Cello.

    Lot of people was expecting that this Linaro Connect will bring Huskyboard alive so people will finally have an option for some cheap board for all their AArch64 needs. Instead Cello was presented:

    Cello
    Cello

    Compared to Husky (below) there are some hardware differences to notice but it is normal as 96borads enterprise specification only tells where to put ports.

    Husky
    Husky

    I suppose that both boards were designed by different companies. Maybe it was a request from Linaro to ODM vendors to design and mass produce 96boards enterprise board and Husky was prototyped first but Cello won. Or maybe we will see Husky in distribution as well. Good part is: you can preorder Cello and get it delivered in Q2/2016.

    Have to admit that I hoped for some industry standard board (96boards Enterprise specification mentions microATX) instead of this weird 96boards-only format which I ranted about already. Anyway 299 USD for quad-core Cortex-A57 with SATA, UEFI, ACPI, PCIe (and maybe few more four letter acronyms) does not sound bad but good luck with finding case for it ;(

    Written by Marcin Juszkiewicz on
  7. From a diary of AArch64 porter — system calls

    When userspace want to talk to kernel it can use system calls. Applications usually do it via wrappers in libc to not have to deal with different numbers on different architectures.

    There are over four hundred system calls in Linux kernel. Many of them have “legacy” status and as such are not available on many new architectures. Riku Voipio from Linaro has nice slides about it.

    So to make things easier for developers I worked on creating a table showing all system calls and their number/status on different architectures. But this table was generated partially by hand…

    I changed code to keep a list of all syscalls in place, wrote generator of C code and added makefile on top. And then pushed it into a new git repo called syscalls-table. Code is MIT licensed.

    Please go, check the code, run it on any architecture and send me pull requests. The only requirements for generating list of architecture specific syscalls list are bash and C compiler. Table generation requires Python but does not have to be run on target platform.

    Written by Marcin Juszkiewicz on
  8. Raspberry/Pi 3? Meh

    I was mostly offline during last three days. You know — meeting long-time-no-see friends, walking tens of kilometres in other city looking at cellphone screen (aka playing Ingress) etc.

    But even then it was hard to not notice that Raspberry Foundation announced new version of their product called Raspberry/Pi 3 — many friends asked me what do I think about it, is it worth buying now, will Fedora run on it etc.

    So let make it short. No, it will not run Fedora 24 because there is no support for this device (I would not call it developer board as it would be insult to all developer boards) in mainline kernel, it still boots in insane way, has new binary blob without permissions to distribute etc… And since R/Pi 2 got released year ago there was no community effort to get this board supported and we have better things to do.

    Is it worth buying? If all you want to do is connect few sensors to GPIO/I²C/SPI pins then maybe as it is cheap, but I would go for Beaglebone to get wide distribution support. If you want to make a desktop then forget it (1GB of memory). If you want to make anything related to storage/networking forget it too (storage on USB shared with all other USB devices as there is only one USB host port).

    For years Raspberry Foundation did not learn that price is not the only thing which makes product worth using. BCM2835 was terrible but usable. BCM2836 got newer cpu core but rest stayed so resulting device was far behind properly made developer boards. BCM2837 should not happen.

    Written by Marcin Juszkiewicz on
Page 20 / 105