Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RFC: Separate patches dir into per tree-based schema #714

Merged
merged 7 commits into from
Dec 8, 2019

Conversation

SvenRoederer
Copy link
Contributor

@SvenRoederer SvenRoederer commented Jun 20, 2019

Ich hatte mir schonmal Gedanken zur Handhabung unserer Patche gemacht und würde gern ein paar Meinungen sammeln.
Dass wir die Patche via quilt nur auf den gesamten Code (OpenWrt und Feeds) oder gar nicht anwenden können erzeugt unnötigen Kompilieraufwand. Wenn nur ein patch für den Luci-Feed geändert wird, wird auch OpenWrt und die anderen Feeds neu gepatcht und müssen dementsprechen kompiliert werden.
Durch eine Auftrennung der Patches jeweils für OpenWrt und die einzelnen Feeds ermöglicht selektives patchen.
Beispiel: patchen von "scripts/feeds":

  • aktueller Zustand: checkout openwrt, install feeds, patch openwrt + feeds, rerun install feeds (wegen patch), compile
  • nach vorgeschlagenem Muster: checkout openwrt, patch openwrt, install feeds, patch feeds, compile

Ich hab mich bei der Struktur an Gluon orientiert und somit können wir direkt patches von dort verwenden (siehe Support für Archer C50 v4)

Das Makefile ist ein schneller Hack, und muss ein generisches "update-feeds" bekommen, dass für jeden feed funkierniert und nicht für jeden feed fest-kodiert ist.

SvenRoederer added a commit to SvenRoederer/freifunk-berlin-firmware that referenced this pull request Jul 31, 2019
SvenRoederer added a commit to SvenRoederer/freifunk-berlin-firmware that referenced this pull request Aug 8, 2019
SvenRoederer added a commit that referenced this pull request Aug 8, 2019
SvenRoederer added a commit that referenced this pull request Oct 14, 2019
@SvenRoederer
Copy link
Contributor Author

Für die Branches "daily/upstream-1907" und "daily/upstream-master" wird dieser Ansatz genutzt. Bei allen builds auf "buildslave01" und "buildslave02" gibt es Fehler beim Zusammenbau der finalen Images wegen fehlendern Paketen. Diese Pakete sind immer die, bei denen durch einen Patch das Makefile geändert wurde. Es wird wohl das .pc Unterverzeichnis im feeds-Verzeichnis (entsteht nach Nutzung von quilt) mit ausgewertet und führt zu einer defekten Paketbeschreibung. Ignorieren des .pc-Verzeichnisses (https://github.com/freifunk-berlin/firmware/blob/daily/upstream-1907/patches/openwrt/601-feeds_ignore_.pc-folder.patch) hilft auch nicht.
Da das Problem nur die zwei o.g. hosts betrifft und die anderen beiden buildslaves problemlos funktionieren vermute ich ein Problem mit (veralteter) Systemsoftware.

@SvenRoederer
Copy link
Contributor Author

Im Moment habe ich mal das GLUON-patch management für unsere Firmware integriert. Dieser Ansatz gefällt mir deutlich besser.

  • einfaches Patch management direkt mit git, ohne Nutzung von quilt
  • einfacher Austausch der patches zwischen beiden build-Frameworks

@akira25
Copy link
Member

akira25 commented Nov 21, 2019

Ich konnte nicht detailliert über deine Änderungen drüber lesen, aber der Ansatz, dass man patches nun direkt über git austauschen kann und zugleich auch noch eine Austauschbarkeit mit gluo-paketen gegeben ist, gefällt mir sehr gut. Feine Sache, danke dafür!

@SvenRoederer
Copy link
Contributor Author

I just overwrote this PR with a complete new approach I mentioned already somewhere. The new way is using some scripts from the gluon-firmware, instead of updating our Makefile. My changes to our current Makefile never really worked and made it more ugly.

Using the scripts from gluon resulting in a much more straight forward design. This opens also the chance to exchange patches directly with the gluon-community.

this script just returns a list of active feeds which can be used by the Makefile.
The Makefile uses the script to generate the FEEDS variable.
* copy $(TARGET) to GLUON_TARGET
* maintain the order that's used in the Makefile of gluon
* gluons $(BOARD) is the same as our $(MAINTARGET), but we keep this
  copied value for compatibility
…-targets

generate a gluon modules file from current config.mk and feeds.conf

new target "modules" which depends on
- .stamp-gluon-module-openwrt
- .stamp-gluon-module-% (iterates over all $(FEEDS))
update the current targets to use the gluon-scripts for cloning,
patching and installing OpenWrt and feeds.

- target .stamp-feeds-updated, which is doing the whole update-steps,
  by depending on patch and prepare
  - update openwrt and feeds
  - patch openwrt and feeds
  - setup feeds within openwrt
- have target patch depend on the patches-files, to reapply them
  after they have changed (moved from target pre-patch)
- drop conflicting / superfluous targets
  - openwrt-update - handled by "patch"
  - $(OPENWRT_DIR) - handled by "patch"
  - $(OPENWRT_DIR)/patches - superfluous, by patching outside of OpenWrt-tree
  - $(OPENWRT_DIR)/feeds.conf - handled by "feeds-update"
  - unpatch - superfluous by not using quilt anymore
- extend target clean to remove added files / folders

Using the Gluon-toolset fixes issue #734, where feed-packages added
as patch have not been installed.
for the gluon-patch mechanism the patches must be organized on a per
repo-basis.
A directory for openwrt related patches and for each feed a separate
directory below packages
SvenRoederer added a commit that referenced this pull request Dec 8, 2019
SvenRoederer added a commit that referenced this pull request Dec 8, 2019
@SvenRoederer SvenRoederer merged commit 3237490 into master Dec 8, 2019
@SvenRoederer SvenRoederer deleted the separate_patches-dir branch December 8, 2019 01:51
@SvenRoederer
Copy link
Contributor Author

Durch die Nutzung der gluon-scripte wurde auch #734 gelöst.

@SvenRoederer
Copy link
Contributor Author

SvenRoederer commented Dec 9, 2019

@akira25 in bfc8f48 ist ein Beispiel, wie ein neues Paket via Patch gezeugt werden kann.
Prinzipiell machst du die Änderungen am Code und einen entsprechenden Commit (im OpenWrt oder Feed). Mit 'git format-patch' erstellt du dann aus dem Commit einen patch (mit ein paar Zusatzheadern), die du dann im entsprechenden patch-Verzeichnis ablegst.

SvenRoederer added a commit to SvenRoederer/freifunk-berlin-firmware that referenced this pull request Aug 19, 2021
SvenRoederer added a commit to SvenRoederer/freifunk-berlin-firmware that referenced this pull request Mar 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants