openSUSE:KDE UpdatedApps 仓库
KDE:UpdatedApps 仓库包含 openSUSE 发行版中发布的最新 KDE 应用程序版本。这些软件包不需要使用最新的 KDE 平台版本。换句话说,它提供了来自 openSUSE Factory 的应用程序,可以直接在所有支持的 openSUSE 发行版上使用。它仅包含软件的稳定版本。
维护仓库
该仓库包含来自 KDE:Distro:Factory 的所有应用程序。它不包含任何来自 KDE SC 的软件包,也不包含较新的库版本。库的两个例外是目标发行版中根本不存在且应用程序需要的库,以及作为应用程序一部分的库。
从技术上讲,所有软件包都只是指向 KDE:Distro:Factory 中对应软件包的链接。为了避免无意中引入例如 beta 版本,这些链接始终指向特定的修订版本,并手动更新(使用 'osc setlinkrev')。如果需要对任何软件包进行修改,最好直接在 KDE:Distro:Factory 中进行。如果需要,可以使用 %{kde_updatedapps} 宏来检测在 KDE:UpdatedApps 中构建。
如果 KDE:Distro:Factory 目前由于即将发布的 openSUSE 版本而冻结,则可以在 KDE:UpdatedApps 中提供较新版本的应用程序。在这种情况下,KDE:UpdatedApps 中的软件包将暂时不仅仅是到 KDE:Distro:Factory 的链接,而是根据需要进行修改。
维护软件包
创建
如果软件包尚未存在于 UpdatedApps 中
$ osc linkpac KDE:Distro:Factory amarok KDE:UpdatedApps
更新
从 KDE:Distro:Factory 找到适合 UpdatedApps 的最新版本
$ osc log KDE:Distro:Factory amarok | less ---------------------------------------------------------------------------- r71 | llunak | 2010-06-27 16:30:59 | 96c695de89e70ea905c55438b1b8f2b0 | unknown | sr Enable ksuseinstall support again everywhere, if this is because of backports, that has to be done differently. ---------------------------------------------------------------------------- r70 | llunak | 2010-06-27 13:51:42 | 1eda34990378d06f8bf8a9d663382d8c | unknown | sr42095 ...
如果 KDE:Distro:Factory 的当前版本适合(例如,它不是 beta 版本),则可以使用当前修订版本(此处为 r71)
osc setlinkrev -r 71 KDE:UpdatedApps amarok
如果需要较旧的版本,则需要检查 osc log 以获取该版本。
修复
由于 KDE:Distro:Factory 和稳定的 openSUSE 发行版之间的差异,某些软件包可能无法在 KDE:UpdatedApps 中构建(最常见的是新软件包在旧版本中不存在或太旧)。例如,如果 libksuseinstall-devel 软件包仅在 KDE:Distro:Factory 和 11.3 中可用,则需要如下修改需要它的 .spec 文件,以便仅在足够版本的 openSUSE 上使用或在 KDE:UpdatedApps 中不构建
%if %suse_version > 1120 || !0%{?kde_updatedapps}
BuildRequires: libksuseinstall-devel
%endif
这些更改最好提交到 KDE:Distro:Factory,而不是在 KDE:UpdatedApps 中本地修改。
如果很难为较旧的发行版构建软件包,则可以简单地禁用在旧版本上构建它,直到有人认为修复该问题值得付出努力。
构建依赖
如果满足以下条件,则允许将构建依赖项添加到 KDE:UpdatedApps
- 新软件包在目标发行版中根本不存在
- 如果可以将构建依赖项视为与软件包密切相关(例如,amarok 的 taglib-extras)
- 如果在 opensuse-kde 邮件列表中经过讨论后获得例外
否则,不允许添加已经存在的通用依赖项的较新版本。
在添加构建依赖项的情况下,将构建默认值('all')设置为禁用,并仅为相关发行版显式启用构建(随着时间的推移,如果它在所有地方都被禁用,那么可以明显地删除它)。
对于未在 KDE:Distro:Factory 中维护,而是在其他地方的软件包,链接需要指向 openSUSE:<version>:Update 仓库,而不是任何开发仓库。在启用这些软件包的构建时,必须确保使用的版本不比将在其使用的 openSUSE 发行版提供的版本旧。
对于其他地方不存在的软件包(例如,软件包是随 KDE SC 发布的库的副本),该软件包不应是链接,而应是完整的软件包副本。
检查
以下脚本检查仓库的状态,主要检查是否需要(可能)更新到较新的修订版本以及常见问题。
osc ls KDE:UpdatedApps | ( while read pack; do
projline=`osc cat KDE:UpdatedApps $pack _link | grep 'project="'`
if test -z "$projline"; then
echo Package $pack is not a link
continue
fi
proj=`echo $projline | sed 's/.*project="\([^"]*\)".*/\1/'`
if ! test "$proj" = "KDE:Distro:Factory"; then
echo "$proj" | grep -q '^openSUSE:[^:]*:Update$'
if test $? -ne 0; then
echo Package $pack links to project $proj
continue
fi
# TODO check that it doesn't provide an older version for a newer distribution
osc meta pkg KDE:UpdatedApps $pack |
(
inbuild=
disabled=
while read line; do
echo "$line" | grep -q '<build>' && inbuild=1
echo "$line" | grep -q '</build>' && inbuild=
if test -n "$inbuild"; then
echo "$line" | grep -q '<disable/>' && disabled=1
fi
done
if test -z "$disabled"; then
echo Package $pack does not link KDE:Distro:Factory and is not disabled by default
fi
)
continue
fi
rev=`echo $projline | sed 's/.*rev="\(.*\)".*/\1/'`
if test -z "$rev"; then
echo Package $pack does not have a revision set
else
origrev=`osc log KDE:Distro:Factory $pack | head -2 | tail -1 | sed 's/^r\([^ ]*\).*/\1/'`
if ! test "$rev" = "$origrev"; then
echo Package $pack does not link the latest revision : $rev vs $origrev
fi
fi
done )