#!/bin/sh
#
# Dieses Skript wird nur ein einziges Mal nach einem Upgrade oder der Erstinstallation ausgefuehrt:
#   http://wiki.openwrt.org/doc/uci#defaults
#

set -eu


# Alle openwrt-Releases bis einschliesslich Chaos Calmer 15.05-rc3 haben die opkg.conf als
# erhaltenswerte Nutzer-Konfiguration behandelt und somit bei Updates unverändert gelassen.
# Dies führt naturgemäß zu unbrauchbaren Paket-Feeds nach einer Firmware-Aktualisierung.
# Das Problem ist hier beschrieben:
#  * https://dev.openwrt.org/ticket/19882
#  * https://dev.openwrt.org/ticket/20439
# Und hier ist die Loesung (ab Chaos Chalmer (final release)):
#  * https://dev.openwrt.org/changeset/46491
# Bei dieser Problembehebung werden die alten Repositories (aus der /etc/opkg.conf) in die
# /etc/opkg/customfeeds.conf verschoben. Die /etc/opkg.conf enthaelt daraufhin nur noch
# grundlegende Einstellungen.
# Die neue Datei /etc/opkg/customfeeds.conf enthaelt dagegen alle distributions-spezifischen
# Repositories. Diese Datei gilt nicht als Konfigurationsdatei und wird somit bei einer
# Aktualisierung ersetzt.
# Somit muessen wir alte unbrauchbare Feeds aus der Datei "customfeeds" entfernen.
remove_obsolete_repositories() {
	# die opkg.conf-Datei der folgenden Releases ist zu ersetzen:
	# backfire: Release v0.4-1
	# attitude_adjustment: Release v0.4-5
	# barrier_breaker: Release v0.5.0/1
	# chaos_calmer/15.05-rc: Entwicklungsversionen von v0.5.2
	local opkg_file="/etc/opkg/customfeeds.conf"
	grep -v '\(backfire\|attitude_adjustment\|barrier_breaker\|chaos_calmer\/15\.05-rc\)' "$opkg_file" | \
		on-function update_file_if_changed "$opkg_file" || true
}


# Der openwrt-Build-Prozess fügt den opennet-Feed zur /etc/opkg/distfeeds.conf hinzu.
# Wir möchten dies jedoch nicht (siehe opennet-Doku zur Paketverwaltung).
remove_opennet_feed_from_distfeeds_opkg_conf() {
	local opkg_file="/etc/opkg/distfeeds.conf"
	grep -v "opennet$" "$opkg_file" | on-function update_file_if_changed "$opkg_file" || true
}


# Fuege den Hinweis auf die separate opennet-opkg-Konfigurationsdatei in die opkg.conf ein.
# Bis Version 0.5.1 war es üblich, alle Pakete einfach via "opkg install" zu installieren.
# Ab Version 0.5.2 sind die Konfigurationsdateien für die opennet- und die openwrt-Feeds
# getrennt zu verwenden.
add_on_repository_hint() {
	grep -q "Opennet" /etc/opkg.conf || return 0
	cat >>/etc/opkg.conf <<EOF
#########################################################################
# Hinweis: verwende "on-function install_from_opennet_repository PAKET" #
#          um Opennet-Pakete zu installieren.                           #
#########################################################################
EOF
}


remove_obsolete_repositories
remove_opennet_feed_from_distfeeds_opkg_conf
add_on_repository_hint
