Build for Debian MIPS

Ross Tajvar ross at tajvar.io
Fri Apr 3 22:51:19 CEST 2020


Hi Marcin,

The Debian images at your first link are too old - it looks like they were
last updated in 2013. I would need a Stretch image. However, that's not the
part I had an issue with - as I mentioned in my initial email, I was able
to install Debian in a MIPS emulator but the package build failed.

I will check out the cross-compiling link you sent.

Thanks,
Ross

On Fri, Apr 3, 2020 at 1:33 PM Marcin Dulinski <martin at dulin.me.uk> wrote:

> Hi
>
> I built a bird for edgerouter using these debian images:
> https://people.debian.org/~aurel32/qemu/ sometimes you can specify cpu
> type but for edgerouter is quite slow... So I used emdebian.org but it
> looks down. I think you can find docker images for each platform.
> You can try use: https://wiki.debian.org/CrossToolchains
>
>
> Regards,
> Martin
>
>
> On Fri, 3 Apr 2020 at 17:58, Ross Tajvar <ross at tajvar.io> wrote:
>
>> Thank you Clemens, this is very useful information. Unfortunately I don't
>> have an Edgerouter with a USB port that's not currently in production.
>> Perhaps I will buy a spare so I can try the process you describe.
>>
>> On Thu, Apr 2, 2020 at 7:47 AM Clemens Schrimpe <
>> clemens.schrimpe at gmail.com> wrote:
>>
>>> Hallo all -
>>>
>>> I built BIRD (1.x and 2.x) for the EdgeRouter platforms(!) myself for
>>> many years now and I still do. At first I used a "proot" environment with
>>> QEMU on a Ubuntu environment, but I have moved on to compiling it directly
>>> on the machines in question a while ago. EdgeRouters (especially the "XG"
>>> or "Infinity" types) have more than enough CPU and RAM to do it there, it's
>>> just the "local storage" and the way their firmware is updated, which
>>> prevents you from "just doing it".
>>>
>>> The solution is simple, though: Current EdgeOS versions support the
>>> USB-Port on those routers and you can just plug in a cheap thumb drive or
>>> even a real SSD/HD with a USB-Interface. Format it with ext3/ext4, mount it
>>> to /mnt for example, clone the current OS onto it, like so:
>>>
>>> rsync -aAXv
>>> --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/
>>> root.dev/*"} / /mnt/
>>>
>>> create shadow-mounts for the special kernel filesystems:
>>>
>>> mount --rbind /dev  /mnt/dev
>>> mount --rbind /proc /mnt/proc
>>> mount --rbind /sys  /mnt/sys
>>>
>>> and now you can chroot into your development environment:
>>>
>>> chroot /mnt /bin/bash --login
>>>
>>> and (bonus track) even start an sshd *within* this environment for
>>> easier access later:
>>>
>>> mkdir /var/run/sshd /run/sshd # may fail on either
>>>
>>> /usr/sbin/sshd -p 222 -o Protocol=2
>>>
>>> which runs on port 222 now (vs. the "normal" sshd, running on port 22).
>>>
>>> Depending on the EdgeOS Version (1.x or 2.x) you install additional
>>> packages need for development. Here are some suggestions
>>> (non-comprehensive):
>>>
>>> Packages for 2.x:
>>>
>>> wget
>>> git
>>> build-essential
>>> autoconf
>>> locales-all
>>> cscope
>>> ncurses-dev
>>> libssl-dev
>>> libev-dev
>>> liblzo2-dev
>>> libpam-dev
>>> minizip
>>> flex
>>> bison
>>> libperl-dev
>>> libreadline-dev
>>> libpcre3-dev
>>> libpcap-dev
>>> libldap-dev
>>> libtalloc-dev
>>> libcap2-dev
>>> libmemcached-dev
>>> libjson-c-dev
>>> libgdbm-dev
>>> libsqlite3-dev
>>> libssh-dev
>>> libssh2-1-dev
>>>
>>> binutils manuell nachinstallieren! (dpkg -i ...)
>>>
>>>
>>> ------
>>>
>>> Packages for 1.x:
>>>
>>>
>>> autoconf
>>> locales-all
>>> cscope
>>> ncurses-dev
>>> libssl-dev
>>> libev-dev
>>> liblzo2-dev
>>> libpam-dev
>>> flex
>>> bison
>>> libperl-dev
>>> libreadline-dev
>>> libpcre3-dev
>>> libpcap-dev
>>> libldap-dev
>>> libtalloc-dev
>>> libcap2-dev
>>> libmemcached-dev
>>> libgdbm-dev
>>> libsqlite3-dev
>>> libssh-dev
>>> libssh2-1-dev
>>>
>>>
>>> Why am I doing this on this "shadow root" again? Because every EdgeOS
>>> update wipes *everything*, except for /config (which is why I place my
>>> compiled "modules" (binaries), like BIRD, into /config/opt/bird/... for
>>> example → *./configure -prefix=/config/opt/bird* .
>>>
>>> This has been working very well for me in a while and I am compiling all
>>> sorts of tools all the time within this "Build jail".
>>>
>>> Tools needed to start this off (mkfs, rsync, etc.) are either already on
>>> the platform or can be installed through the officially supported "apt-get"
>>> mechanism.
>>>
>>> The above was quickly copy&pasted together from what I have on my
>>> terminal windows right now and and is surely lacking a step or two along
>>> the way, sorry. Please feel free to ask for more detailed instructions if
>>> you get stuck somewhere.
>>>
>>> Greeting,
>>>
>>> Clemens
>>>
>>> PS: If you want to cover the whole EdgeRouter platform you'll need to do
>>> this *twice* - once on an ER-Pro/ER-Infinity and once on an ER-10X (the
>>> only X-router with an open USB port), as the former is MIPS-BE and the
>>> latter is MIPS-LE ... yes, all of these can somehow be "emulated", but I
>>> just found it much easier to create/operate/maintain those build
>>> environments on their respective *native* platforms - besides: They are
>>> incredibly cheap - even the Infinity router (8 x SFP+, 116 CPUs - 16G RAM -
>>> bored beyond belief) is comparatively cheap.
>>>
>>> We've not been able to build ourselves on MIPS yet, we went into some
>>> strange problems last time (don't remember exactly). Were you so kind
>>> please and could you please help us setting up Debian for MIPS in QEMU if I
>>> fail to manage it once more?
>>> The main issue was, what hardware to choose and how to boot it. But I'll
>>> try once more before asking any detailed question. Then we can replicate
>>> your issue and probably even build and test for MIPS.
>>>
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://trubka.network.cz/pipermail/bird-users/attachments/20200403/3cf90a7a/attachment.htm>


More information about the Bird-users mailing list