How to get started with building your own?

Hello

Could you link to some set of instruction on how to go on downloading the sources, configuring them to some kind of default configuration for some device and then building a flashable image?

After I get started on this, I'll come back for more questions and answers.

The ideal host for this is an Ubuntu system, I guess. Are there any other equally good candidates? Would any BSD do? Or is linux a better choice because LEDE is a linux?

Hi, have you taken a look at the documentation (eg. here: https://lede-project.org/docs/guide-developer/use-buildsystem)?

1 Like

Well.

$ git clone
You must specify a repository to clone.

Where are the repositories told about?

Edit:

Here: https://lede-project.org/docs/guide-developer/the-source-code

Well. Now that I have checked out the code, how do I apply a default configuration for a certain device? I assume that if I were to build the code for multiple devices, I'd need to do it a device at a time.

Edit: Here: https://lede-project.org/docs/guide-developer/quickstart-build-images

It seems like every time I change something in the kernel configuration, like for example when I want to have another module as a packge, the kernel version changes:

[code]# opkg install kmod-fs-f2fs
Installing kmod-fs-f2fs (4.4.71-1) to root...
Downloading http://my.own.package.server.com/releases/17.01.2/targets/ar71xx/generic/packages/kmod-fs-f2fs_4.4.71-1_mips_24kc.ipk
Collected errors:

  • satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-fs-f2fs:
  • kernel (= 4.4.71-1-60c04c22d7e4cde4f7dda280a4b52318) *
  • opkg_install_cmd: Cannot install package kmod-fs-f2fs.[/code]

Before that, it was:

[code]# opkg install kmod-fs-f2fs
Installing kmod-fs-f2fs (4.4.71-1) to root...
Downloading http://my.own.package.server.com/releases/17.01.2/targets/ar71xx/generic/packages/kmod-fs-f2fs_4.4.71-1_mips_24kc.ipk
Collected errors:

  • satisfy_dependencies_for: Cannot satisfy the following dependencies for kmod-fs-f2fs:
  • kernel (= 4.4.71-1-e6d0ac67af03bd7d792bd5e38ec1c856) *
  • opkg_install_cmd: Cannot install package kmod-fs-f2fs.[/code]

It is strange that I have

[*] Select all target specific packages by default [*] Select all kernel module packages by default [*] Select all userspace packages by default

selected, and that did not include any filesystem modules. So had to go on selecting these separately. Which brought me to my current problem.

Is there a way to have everything compiled as packages, and a minimal image, onto which one can install anything at will?

Edit: I simply wanted the default package for TP-Link Archer C7 v2 with support for UTF-8 in busybox and all the OpenvSwitch packages available. In Chaos Calmer the OpenvSwitch was uninstallable and there was no UTF-8 support.

I noticed that

  • There are packages that are not included in the ALL set
  • But those packages are included by a subset, for example, SOUND
  • The Radius 2 server fails to compile (or the libs)
  • Gstreamer (PACKAGE_gst1-plugins-base) is required by CONFIG_PACKAGE_libdmapsharing, even though this is not visible in the menu (i. e. the help screen of gstreamer1-plugins-base). I first attempted to enable "almost everything" and had multiple problems compiling gst1-plugins-base, so I decided to leave it out. But it was quite hard when it kept coming along even though the menu said it wasn't supposed to. Finally, using grep on the feeds directory I found the culprit.

These are all related to v17.01.2 and could be fixed in the HEAD. Also, I am not sure which ones of these are worth a bug report. Maybe I could search the issue tracker after I'm done with building an image for my C7.

In general it makes no sense to build all packages, the only thing that needs to be tailored to your build is kmods.

Also the CONFIG_ALL and CONFIG_ALL_KMODS options have no effect on existing configurations, since they only affect the choice state.

I suggest to only enable CONFIG_ALL_KMODS using a command like: sed -i -e '/# CONFIG_PACKAGE_kmod-.* is not set/d' .config && echo 'CONFIG_ALL_KMODS=y' >> .config && make defconfig

Finally when invoking make, use make ... IGNORE_ERRORS="n m" to skip broken packages which are not set to builtin.

CONFIG_PACKAGE_gstreamer1-plugins-base is selected by

PACKAGE_libextractor-plugin-gstreamer && PACKAGE_libextractor && (!ALL || AUDIO_SUPPORT) ||

PACKAGE_gst1-libav && AUDIO_SUPPORT ||

PACKAGE_gstreamer1-plugins-bad && (!ALL || AUDIO_SUPPORT) ||

PACKAGE_gstreamer1-plugins-good && (!ALL || AUDIO_SUPPORT) ||

PACKAGE_gstreamer1-plugins-ugly && (!ALL || BUILD_PATENTED) && (!ALL || AUDIO_SUPPORT)

I can't understand the (!ALL || AUDIO_SUPPORT) part. I mean, you need plugins-base when plugins-good is selected, AND
a) AUDIO_SUPPORT is enabled, or
b) ALL is disabled, even if AUDIO_SUPPORT is still disabled

That is, having ALL enabled is not enough if AUDIO_SUPPORT is disabled, but somehow having ALL disabled is in itself enough to request plugins-base with plugins-good. Then, if I enable ALL, I will not get plugins-base with plugins-good.

I mean, how can enabling ALL work to disable packages?

If I individually select plugins-good, I will get its prerequisite, which is plugins-base, based on the !ALL criteria. Then I enable ALL and suddenly plugins-good will no more get its prerequisite.

Can anyone explain this?

Ok. And I can safely come back to build more packages, and the kernel version will stay the same?

This is good then. I was frustrated by it changing every time I built something, so I deciced to do the build once and for all.

Any idea, where does the checksum part of the kernel version come? From the actual checksum of the compressed kernel file?

checking for XML::Parser... configure: error: XML::Parser perl module is required for intltool

I do have that selected.

<M> perl-xml-parser.......................................... Perl XML Parser

It's like the intltool requires it, but the menuconfig doesn't know that intltool requires it. And even though I have it selected, the build process does not find it.

I do not intend to just complain. I wonder if there is something I can do to help with these.

Or does it mean that my build system needs to have the package?

Its a checksum over all selected kernel symbols, this is done since every enabled/disabled module can potentially change the kernel ABI.

I think this might refer to the host system.

1 Like

Checking out files from the git repository... Cloning into 'libevhtp-1.1.6'... remote: Repository not found.

I wonder if I should report this somewhere. This is the v17.01.2 release. Is it possible or necessary to bump the version, or is the repository moved or temporarily missing?

Another one:

Checking out files from the git repository... Cloning into 'libevhtp-1.1.6'... remote: Repository not found. fatal: Authentication failed for 'https://github.com/ellzey/libevhtp.git/'

I have libevhtp deselected in menuconfig, but for some reason it is still being built.

Later found out that net/seafile-server requires it.