From 9a94329e8f6f7c66176936cb514f3f1e2102ad75 Mon Sep 17 00:00:00 2001 From: Tim Niemeyer Date: Fri, 11 Apr 2014 23:41:21 +0200 Subject: [PATCH] build_patches: reactive no_config_save and remove old patches Signed-off-by: Tim Niemeyer --- build_patches/dont_overwrite_wan_config.patch | 38 - .../invoke_sysctl_before_network.patch | 15 - build_patches/openwrt/feeds | 655 ------------------ build_patches/sysupgrade_no_config_save.patch | 6 +- buildscript | 23 +- 5 files changed, 4 insertions(+), 733 deletions(-) delete mode 100644 build_patches/dont_overwrite_wan_config.patch delete mode 100644 build_patches/invoke_sysctl_before_network.patch delete mode 100644 build_patches/openwrt/feeds diff --git a/build_patches/dont_overwrite_wan_config.patch b/build_patches/dont_overwrite_wan_config.patch deleted file mode 100644 index 6ffb2f4..0000000 --- a/build_patches/dont_overwrite_wan_config.patch +++ /dev/null @@ -1,38 +0,0 @@ -Index: package/base-files/files/lib/functions/uci-defaults.sh -=================================================================== ---- package/base-files/files/lib/functions/uci-defaults.sh (Revision 35298) -+++ package/base-files/files/lib/functions/uci-defaults.sh (Arbeitskopie) -@@ -166,33 +166,15 @@ - - ucidef_set_interface_lan() { - local ifname=$1 -- -- uci batch < /proc/sys/kernel/core_pattern - } -+ -+ # some RAs come to early otherwise: -+ [ -f /etc/sysctl.conf ] && sysctl -p -e >&- -+ - service_start /sbin/netifd - - setup_switch() { return 0; } diff --git a/build_patches/openwrt/feeds b/build_patches/openwrt/feeds deleted file mode 100644 index 85aeab5..0000000 --- a/build_patches/openwrt/feeds +++ /dev/null @@ -1,655 +0,0 @@ -#!/usr/bin/perl -use Getopt::Std; -use FindBin; -use Cwd; -use lib "$FindBin::Bin"; -use metadata; -use warnings; -use strict; -use Cwd 'abs_path'; - -chdir "$FindBin::Bin/.."; -$ENV{TOPDIR}=getcwd(); -$ENV{GIT_CONFIG_PARAMETERS}="'core.autocrlf=false'"; - -my $mk=`which gmake 2>/dev/null`; # select the right 'make' program -chomp($mk); # trim trailing newline -$mk or $mk = "make"; # default to 'make' - -# check version of make -my @mkver = split /\s+/, `$mk -v`, 4; -my $valid_mk = 1; -$mkver[0] =~ /^GNU/ or $valid_mk = 0; -$mkver[1] =~ /^Make/ or $valid_mk = 0; -$mkver[2] >= "3.81" or $valid_mk = 0; -$valid_mk or die "Unsupported version of make found: $mk\n"; - -my @feeds; -my %build_packages; -my %installed; -my %feed_cache; - -my $feed_package = {}; -my $feed_src = {}; - -sub parse_config() { - my $line = 0; - my %name; - - open FEEDS, "feeds.conf" or - open FEEDS, "feeds.conf.default" or - die "Unable to open feeds configuration"; - while () { - chomp; - s/#.+$//; - next unless /\S/; - my @line = split /\s+/, $_, 3; - my @src; - $line++; - - my $valid = 1; - $line[0] =~ /^src-\w+$/ or $valid = 0; - $line[1] =~ /^\w+$/ or $valid = 0; - @src = split /\s+/, $line[2]; - $valid or die "Syntax error in feeds.conf, line: $line\n"; - - $name{$line[1]} and die "Duplicate feed name '$line[1]', line: $line\n"; - $name{$line[1]} = 1; - - push @feeds, [$line[0], $line[1], \@src]; - } - close FEEDS; -} - -sub update_location($$) -{ - my $name = shift; - my $url = shift; - my $old_url; - - -d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1; - - if( open LOC, "< ./feeds/$name.tmp/location" ) - { - chomp($old_url = readline LOC); - close LOC; - } - - if( !$old_url || $old_url ne $url ) - { - if( open LOC, "> ./feeds/$name.tmp/location" ) - { - print LOC $url, "\n"; - close LOC; - } - return $old_url ? 1 : 0; - } - - return 0; -} - -sub update_index($) -{ - my $name = shift; - - -d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1; - -d "./feeds/$name.tmp/info" or mkdir "./feeds/$name.tmp/info" or return 1; - - system("$mk -s prepare-mk OPENWRT_BUILD= TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); - system("$mk -s -f include/scan.mk IS_TTY=1 SCAN_TARGET=\"packageinfo\" SCAN_DIR=\"feeds/$name\" SCAN_NAME=\"package\" SCAN_DEPS=\"$ENV{TOPDIR}/include/package*.mk\" SCAN_DEPTH=5 SCAN_EXTRA=\"\" TMP_DIR=\"$ENV{TOPDIR}/feeds/$name.tmp\""); - system("ln -sf $name.tmp/.packageinfo ./feeds/$name.index"); - - return 0; -} - -my %update_method = ( - 'src-svn' => { - 'init' => "svn checkout '%s' '%s'", - 'update' => "svn update", - 'controldir' => ".svn", - 'revision' => "svn info | grep 'Revision' | cut -d ' ' -f 2 | tr -d '\n'"}, - 'src-cpy' => { - 'init' => "cp -Rf '%s' '%s'", - 'update' => "", - 'revision' => "echo -n 'local'"}, - 'src-link' => { - 'init' => "ln -s '%s' '%s'", - 'update' => "", - 'revision' => "echo -n 'local'"}, - 'src-git' => { - 'init' => "git clone --depth 1 '%s' '%s'", - 'init_branch' => "git clone --depth 1 --branch '%s' '%s' '%s'", - 'init_commit' => "git clone '%s' '%s' && cd '%s' && git checkout -b '%s' '%s' && cd -", - 'update' => "git pull --ff", - 'controldir' => ".git", - 'revision' => "git show --abbrev-commit HEAD | head -n 1 | cut -d ' ' -f 2 | tr -d '\n'"}, - 'src-gitsvn' => { - 'init' => "git svn clone -r HEAD '%s' '%s'", - 'update' => "git svn rebase", - 'controldir' => ".git", - 'revision' => "git show --abbrev-commit HEAD | head -n 1 | cut -d ' ' -f 2 | tr -d '\n'"}, - 'src-bzr' => { - 'init' => "bzr checkout --lightweight '%s' '%s'", - 'update' => "bzr update", - 'controldir' => ".bzr"}, - 'src-hg' => { - 'init' => "hg clone '%s' '%s'", - 'update' => "hg pull --update", - 'controldir' => ".hg"}, - 'src-darcs' => { - 'init' => "darcs get '%s' '%s'", - 'update' => "darcs pull -a", - 'controldir' => "_darcs"}, -); - -# src-git: pull broken -# src-cpy: broken if `basename $src` != $name - -sub update_feed_via($$$$) { - my $type = shift; - my $name = shift; - my $src = shift; - my $relocate = shift; - - my $m = $update_method{$type}; - my $localpath = "./feeds/$name"; - my $safepath = $localpath; - $safepath =~ s/'/'\\''/; - my ($base_branch, $branch) = split(/;/, $src, 2); - my ($base_commit, $commit) = split(/\^/, $src, 2); - - if( $relocate || !$m->{'update'} || !-d "$localpath/$m->{'controldir'}" ) { - system("rm -rf '$safepath'"); - if ($m->{'init_branch'} and $branch) { - system(sprintf($m->{'init_branch'}, $branch, $base_branch, $safepath)) == 0 or return 1; - } elsif ($m->{'init_commit'} and $commit) { - system(sprintf($m->{'init_commit'}, $base_commit, $safepath, $safepath, $commit, $commit)) == 0 or return 1; - } else { - system(sprintf($m->{'init'}, $src, $safepath)) == 0 or return 1; - } - } elsif ($m->{'init_commit'} and $commit) { - # in case git hash has been provided don't update the feed - } else { - system("cd '$safepath'; $m->{'update'}") == 0 or return 1; - } - - return 0; -} - -sub get_feed($) { - my $feed = shift; - - if (!defined($feed_cache{$feed})) { - my $file = "./feeds/$feed.index"; - - clear_packages(); - -f $file or do { - print "Ignoring feed '$feed' - index missing\n"; - return; - }; - parse_package_metadata($file) or return; - $feed_cache{$feed} = [ { %package }, { %srcpackage } ]; - } - - $feed_package = $feed_cache{$feed}->[0]; - $feed_src = $feed_cache{$feed}->[1]; - return $feed_cache{$feed}->[0]; -} - -sub get_installed() { - system("$mk -s prepare-tmpinfo OPENWRT_BUILD="); - clear_packages(); - parse_package_metadata("./tmp/.packageinfo"); - %installed = %package; -} - -sub search_feed { - my $feed = shift; - my @substr = @_; - my $display; - - return unless @substr > 0; - get_feed($feed); - foreach my $name (sort { lc($a) cmp lc($b) } keys %$feed_package) { - my $pkg = $feed_package->{$name}; - my $substr; - my $pkgmatch = 1; - - next if $pkg->{vdepends}; - foreach my $substr (@substr) { - my $match; - foreach my $key (qw(name title description src)) { - $pkg->{$key} and $substr and $pkg->{$key} =~ m/$substr/i and $match = 1; - } - $match or undef $pkgmatch; - }; - $pkgmatch and do { - $display or do { - print "Search results in feed '$feed':\n"; - $display = 1; - }; - printf "\%-25s\t\%s\n", $pkg->{name}, $pkg->{title}; - }; - } - return 0; -} - -sub search { - my %opts; - - getopt('r:', \%opts); - foreach my $feed (@feeds) { - search_feed($feed->[1], @ARGV) if (!defined($opts{r}) or $opts{r} eq $feed->[1]); - } -} - -sub list_feed { - my $feed = shift; - - get_feed($feed); - foreach my $name (sort { lc($a) cmp lc($b) } keys %$feed_package) { - my $pkg = $feed_package->{$name}; - next if $pkg->{vdepends}; - if($pkg->{name}) { - printf "\%-32s\t\%s\n", $pkg->{name}, $pkg->{title}; - } - } - - return 0; -} - -sub list { - my %opts; - - getopts('r:d:sh', \%opts); - if ($opts{h}) { - usage(); - return 0; - } - if ($opts{s}) { - foreach my $feed (@feeds) { - my $localpath = "./feeds/$feed->[1]"; - my $m = $update_method{$feed->[0]}; - my $revision; - if( !$m->{'revision'} ) { - $revision = "X"; - } - elsif( $m->{'controldir'} && -d "$localpath/$m->{'controldir'}" ) { - $revision = `cd '$localpath'; $m->{'revision'}`; - } - else { - $revision = "local"; - } - if ($opts{d}) { - printf "%s%s%s%s%s%s%s\n", $feed->[1], $opts{d}, $feed->[0], $opts{d}, $revision, $opts{d}, join(", ", @{$feed->[2]}); - } - else { - printf "\%-8s \%-8s \%-8s \%s\n", $feed->[1], $feed->[0], $revision, join(", ", @{$feed->[2]}); - } - } - return 0; - } - foreach my $feed (@feeds) { - list_feed($feed->[1], @ARGV) if (!defined($opts{r}) or $opts{r} eq $feed->[1]); - } - return 0; -} - -sub install_generic() { - my $feed = shift; - my $pkg = shift; - my $path = $pkg->{makefile}; - - if($path) { - $path =~ s/\/Makefile$//; - - -d "./package/feeds" or mkdir "./package/feeds"; - -d "./package/feeds/$feed->[1]" or mkdir "./package/feeds/$feed->[1]"; - system("ln -sf ../../../$path ./package/feeds/$feed->[1]/"); - } else { - warn "Package is not valid\n"; - return 1; - } - - return 0; -} - -my %install_method = ( - 'src-svn' => \&install_generic, - 'src-cpy' => \&install_generic, - 'src-link' => \&install_generic, - 'src-git' => \&install_generic, - 'src-gitsvn' => \&install_generic, - 'src-bzr' => \&install_generic, - 'src-hg' => \&install_generic, - 'src-darcs' => \&install_generic, -); - -my %feed; - -sub lookup_package($$) { - my $feed = shift; - my $package = shift; - - foreach my $feed ($feed, @feeds) { - next unless $feed->[1]; - next unless $feed{$feed->[1]}; - $feed{$feed->[1]}->{$package} and return $feed; - } - return; -} - -sub is_core_package($) { - my $package = shift; - foreach my $file ("tmp/info/.packageinfo-$package", glob("tmp/info/.packageinfo-*_$package")) { - next unless index($file, "tmp/info/.packageinfo-feeds_"); - return 1 if -s $file; - } - return 0; -} - -sub install_package { - my $feed = shift; - my $name = shift; - my $ret = 0; - - $feed = lookup_package($feed, $name); - $feed or do { - $installed{$name} and return 0; - # TODO: check if it's already installed within ./package directory - $feed_src->{$name} or is_core_package($name) or warn "WARNING: No feed for package '$name' found, maybe it's already part of the standard packages?\n"; - return 0; - }; - - # switch to the metadata for the selected feed - get_feed($feed->[1]); - - my $pkg = $feed{$feed->[1]}->{$name} or return 1; - $pkg->{name} or do { - $installed{$name} and return 0; - # TODO: check if this is an alias package, maybe it's known by another name - warn "WARNING: Package '$name' is not available in feed $feed->[1].\n"; - return 0; - }; - my $src = $pkg->{src}; - my $type = $feed->[0]; - $src or $src = $name; - - # previously installed packages set the runtime package - # newly installed packages set the source package - $installed{$src} and return 0; - - # check previously installed packages - $installed{$name} and return 0; - $installed{$src} = 1; - warn "Installing package '$src'\n"; - - $install_method{$type} or do { - warn "Unknown installation method: '$type'\n"; - return 1; - }; - - &{$install_method{$type}}($feed, $pkg) == 0 or do { - warn "failed.\n"; - return 1; - }; - - # install all dependencies referenced from the source package - foreach my $vpkg (@{$feed_src->{$src}}) { - foreach my $dep (@{$vpkg->{depends}}, @{$vpkg->{builddepends}}, @{$vpkg->{"builddepends/host"}}) { - next if $dep =~ /@/; - $dep =~ s/^\+//; - $dep =~ s/^.+://; - $dep =~ s/\/.+$//; - next unless $dep; - install_package($feed, $dep) == 0 or $ret = 1; - } - } - - return $ret; -} - -sub refresh_config { - my $default = shift; - - # workaround for timestamp check - system("rm -f tmp/.packageinfo"); - - # refresh the config - if ($default) { - system("$mk oldconfig CONFDEFAULT=\"$default\" Config.in >/dev/null 2>/dev/null"); - } else { - system("$mk defconfig Config.in >/dev/null 2>/dev/null"); - } -} - -sub install { - my $name; - my %opts; - my $feed; - my $ret = 0; - - getopts('ap:d:h', \%opts); - - if ($opts{h}) { - usage(); - return 0; - } - - get_installed(); - - foreach my $f (@feeds) { - # index all feeds - $feed{$f->[1]} = get_feed($f->[1]); - - # look up the preferred feed - $opts{p} and $f->[1] eq $opts{p} and $feed = $f; - } - - if($opts{a}) { - foreach my $f (@feeds) { - if (!defined($opts{p}) or $opts{p} eq $f->[1]) { - printf "Installing all packages from feed %s.\n", $f->[1]; - get_feed($f->[1]); - foreach my $name (sort { lc($a) cmp lc($b) } keys %$feed_package) { - my $p = $feed_package->{$name}; - next if $p->{vdepends}; - if( $p->{name} ) { - install_package($feed, $p->{name}) == 0 or $ret = 1; - get_feed($f->[1]); - } - } - } - } - } else { - while ($name = shift @ARGV) { - install_package($feed, $name) == 0 or $ret = 1; - } - } - - # workaround for timestamp check - - # set the defaults - if ($opts{d} and $opts{d} =~ /^[ymn]$/) { - refresh_config($opts{d}); - } - - return $ret; -} - -sub uninstall { - my %opts; - my $name; - my $uninstall; - - getopts('ah', \%opts); - - if ($opts{h}) { - usage(); - return 0; - } - - if ($opts{a}) { - system("rm -rvf ./package/feeds"); - $uninstall = 1; - } else { - if($#ARGV == -1) { - warn "WARNING: no package to uninstall\n"; - return 0; - } - get_installed(); - while ($name = shift @ARGV) { - my $pkg = $installed{$name}; - $pkg or do { - warn "WARNING: $name not installed\n"; - next; - }; - $pkg->{src} and $name = $pkg->{src}; - warn "Uninstalling package '$name'\n"; - system("rm -f ./package/feeds/*/$name"); - $uninstall = 1; - } - } - $uninstall and refresh_config(); - return 0; -} - -sub update_feed($$$$) -{ - my $type=shift; - my $name=shift; - my $src=shift; - my $perform_update=shift; - my $force_relocate=update_location( $name, "@$src" ); - - if( $force_relocate ) { - warn "Source of feed $name has changed, replacing copy\n"; - } - $update_method{$type} or do { - warn "Unknown type '$type' in feed $name\n"; - return 1; - }; - $perform_update and do { - my $failed = 1; - foreach my $feedsrc (@$src) { - warn "Updating feed '$name' from '$feedsrc' ...\n"; - next unless update_feed_via($type, $name, $feedsrc, $force_relocate) == 0; - $failed = 0; - last; - } - $failed and do { - warn "failed.\n"; - return 1; - }; - }; - warn "Create index file './feeds/$name.index' \n"; - update_index($name) == 0 or do { - warn "failed.\n"; - return 1; - }; - return 0; -} - -sub update { - my %opts; - my $feed_name; - my $perform_update=1; - - $ENV{SCAN_COOKIE} = $$; - $ENV{OPENWRT_VERBOSE} = 's'; - - getopts('ahi', \%opts); - - if ($opts{h}) { - usage(); - return 0; - } - - if ($opts{i}) { - # don't update from (remote) repository - # only re-create index information - $perform_update=0; - } - - -d "feeds" or do { - mkdir "feeds" or die "Unable to create the feeds directory"; - }; - - if ( ($#ARGV == -1) or $opts{a}) { - foreach my $feed (@feeds) { - my ($type, $name, $src) = @$feed; - update_feed($type, $name, $src, $perform_update); - } - } else { - while ($feed_name = shift @ARGV) { - foreach my $feed (@feeds) { - my ($type, $name, $src) = @$feed; - if($feed_name ne $name) { - next; - } - update_feed($type, $name, $src, $perform_update); - } - } - } - - refresh_config(); - - return 0; -} - -sub usage() { - print < [options] - -Commands: - list [options]: List feeds, their content and revisions (if installed) - Options: - -s : List of feed names and their URL. - -r : List packages of specified feed. - -d : Use specified delimiter to distinguish rows (default: spaces) - - install [options] : Install a package - Options: - -a : Install all packages from all feeds or from the specified feed using the -p option. - -p : Prefer this feed when installing packages. - -d : Set default for newly installed packages. - - search [options] : Search for a package - Options: - -r : Only search in this feed - - uninstall -a|: Uninstall a package - Options: - -a : Uninstalls all packages. - - update -a|: Update packages and lists of feeds in feeds.conf . - Options: - -a : Update all feeds listed within feeds.conf. Otherwise the specified feeds will be updated. - -i : Recreate the index only. No feed update from repository is performed. - - clean: Remove downloaded/generated files. - -EOF - exit(1); -} - -my %commands = ( - 'list' => \&list, - 'update' => \&update, - 'install' => \&install, - 'search' => \&search, - 'uninstall' => \&uninstall, - 'clean' => sub { - system("rm -rf feeds"); - } -); - -my $arg = shift @ARGV; -$arg or usage(); -parse_config; -foreach my $cmd (keys %commands) { - $arg eq $cmd and do { - exit(&{$commands{$cmd}}()); - }; -} -usage(); diff --git a/build_patches/sysupgrade_no_config_save.patch b/build_patches/sysupgrade_no_config_save.patch index 890b3b5..b40f1a8 100644 --- a/build_patches/sysupgrade_no_config_save.patch +++ b/build_patches/sysupgrade_no_config_save.patch @@ -1,8 +1,8 @@ Index: package/base-files/files/sbin/sysupgrade =================================================================== ---- package/base-files/files/sbin/sysupgrade (Revision 35298) -+++ package/base-files/files/sbin/sysupgrade (Arbeitskopie) -@@ -90,7 +90,7 @@ +--- package/base-files/files/sbin/sysupgrade ++++ package/base-files/files/sbin/sysupgrade +@@ -101,7 +101,7 @@ add_uci_conffiles() { local file="$1" ( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \ diff --git a/buildscript b/buildscript index c2dcbb8..4ddef5a 100755 --- a/buildscript +++ b/buildscript @@ -95,28 +95,7 @@ prepare() { # todo evaluate this with the new openwrt # This changes the default behavior of sysupgrade to not save the config - #cat build_patches/sysupgrade_no_config_save.patch | patch -p0 -d $target - - # todo evaluate this with the new openwrt - # This adds the sysctl load just before the network comes up - cat build_patches/invoke_sysctl_before_network.patch | patch -p0 -d $target - - # use nbd's backport of mac80211 - /bin/rm -rf $target/package/mac80211 - /bin/rm -rf $target/package/hostapd - git clone git://nbd.name/aa-mac80211.git $target/package/aa-mac80211 - git --git-dir=$target/package/aa-mac80211/.git --work-tree=$target/package/aa-mac80211/ \ - checkout 8d86801ae606544faee1e0e25ef59a3f8f059871 - mv $target/package/aa-mac80211/mac80211 $target/package/mac80211 - mv $target/package/aa-mac80211/hostapd $target/package/hostapd - - #backport the latests kernel fixes (needed for newer batman) - #svn diff -r 35298:37768 svn://svn.openwrt.org/openwrt/branches/attitude_adjustment/target/linux/generic > build_patches/kernel_37768.patch - cat build_patches/kernel_generic_37768.patch | patch -p0 -d $target/target/linux/generic - - #backport kernelpatches from openwrt r36664 - #svn diff -r 35298:36664 svn://svn.openwrt.org/openwrt/branches/attitude_adjustment/target/linux/ar71xx > build_patches/kernel_ar71xx_36664.patch - cat build_patches/kernel_ar71xx_36664.patch | patch -p0 -d $target/target/linux/ar71xx + cat build_patches/sysupgrade_no_config_save.patch | patch -p0 -d $target #saves ~200MB for each build test -d ./src/dl || mkdir ./src/dl