OpenSUSE 13: Flatpakをインストールする

Fedora 25のFlatpakをOpenSUSE 13へ移植します。ただしOpenSUSE 13のカーネルは3.16である一方、Flatpakはカーネル4.0以上を必要とするので、OpenSUSE Leap 42.2のカーネルを利用します。最初からOpenSUSE Leap 42.2で実行しても良いでしょう。

1 OpenSUSE Leap 42.2のカーネルをインストール

OpenSUSE Leap 42.2のkernel-default-4.4.36-8.1.x86_64.rpmをインストールします。起動しなくなった場合のために、OpenSuSE 13.2のLive環境を用意してから実行してください。kernel-desktop等をインストールすれば元に戻せます。

> L=http://download.opensuse.org/update/leap/42.2/
> wget -q ${L}/oss/x86_64/kernel-default-4.4.36-8.1.x86_64.rpm
> sudo zypper -n in kernel-default-4.4.36-8.1.x86_64.rpm
> sudo reboot

2 rpmbuildの設定

rpm-buildとpatterns-openSUSE-devel_basisをインストールします。

> sudo zypper -n in rpm-build patterns-openSUSE-devel_basis

3 ostreeのインストール

この記事で使う変数を設定します。

> F="https://dl.fedoraproject.org/pub/fedora/linux/releases/25"
> B="BuildRequires:"
> R="Requires:"

Fedora 25のostreeのsrc.rpmをダウンロードします。

> wget -q ${F}/Everything/source/tree/Packages/o/ostree-2016.12-1.fc25.src.rpm
> rpm -i ostree-2016.12-1.fc25.src.rpm
> cd ~/rpmbuild

selinuxを無効にします。Fedora 25のパッケージ名からOpenSUSE 13のものに変更します。

> sed -e "s/^$B\(.*\)pkgconfig(libselinux).*//g" \
      -e "s;^$B\(.*\)/usr/bin/g-ir-scanner;$B\1gobject-introspection-devel;g" \
      -e "s/^$R\(.*\)systemd-units/$R\1systemd/g" \
      -e 's/--with-selinux/--without-selinux/g' \
      -i SPECS/ostree.spec

BuildRequiresのパッケージをインストールします。

> sudo zypper -n in $(rpmspec -q SPECS/ostree.spec --buildrequires)

ostreeをビルドしてインストールします。

> rpmbuild -ba SPECS/ostree.spec
> sudo zypper -n in RPMS/x86_64/ostree-*.rpm
> cd

4 bubblewrapのインストール

この記事で使う変数を設定します。

> F="https://dl.fedoraproject.org/pub/fedora/linux/releases/25"
> B="BuildRequires:"
> R="Requires:"

Fedora 25のbubblewrapのsrc.rpmをダウンロードします。

> wget -q ${F}/Everything/source/tree/Packages/b/bubblewrap-0.1.3-2.fc25.src.rpm
> rpm -i bubblewrap-0.1.3-2.fc25.src.rpm
> cd ~/rpmbuild

selinuxを無効にします。Fedora 25のパッケージ名からOpenSUSE 13のものに変更します。定義されていないRPMマクロをコマンドに置き換えます。

> sed -e "s;^$B\(.*\)docbook-style-xsl;$B\1docbook-xsl-stylesheets;g" \
    -e 's/^%configure \(.*\)/%configure --disable-selinux \1/g' \
    -e 's/^%make_build/%{__make} -O %{?_smp_mflags}/g' \
    -i SPECS/bubblewrap.spec

BuildRequiresのパッケージをインストールします。

> sudo zypper -n in $(rpmspec -q SPECS/bubblewrap.spec --buildrequires)

bubblewrapをビルドしてインストールします。

> rpmbuild -ba SPECS/bubblewrap.spec
> sudo zypper -n in RPMS/x86_64/bubblewrap-*.rpm
> cd

5 flatpakのインストール

この記事で使う変数を設定します。

> F="https://dl.fedoraproject.org/pub/fedora/linux/releases/25"
> B="BuildRequires:"
> R="Requires:"

Fedora 25のflatpakのsrc.rpmをダウンロードします。

> wget -q ${F}/Everything/source/tree/Packages/f/flatpak-0.6.13-1.fc25.src.rpm
> rpm -i flatpak-0.6.13-1.fc25.src.rpm
> cd ~/rpmbuild

Fedora 25のパッケージ名からOpenSUSE 13のものに変更します。定義されていないRPMマクロをコマンドに置き換えます。

> sed -e "s;^$B\(.*\)/usr/bin/xmlto;$B\1xmlto;g" \
    -e "s;^$B\(.*\)/usr/bin/xsltproc;$B\1libxslt-tools;g" \
    -e "s;^$B\(.*\)docbook-style-xsl;$B\1docbook-xsl-stylesheets;g" \
    -e "s/^$B\(.*\)pkgconfig(libelf).*/$B\1libelf-devel/g" \
    -e "s;^$R\(.*\)/usr/bin/tar;$R\1/bin/tar;g" \
    -e 's;%{_pkgdocdir};/usr/share/doc/%{name};g' \
    -e 's;%{_docdir}/%{name};/usr/share/doc/%{name};g' \
    -e 's;%{_userunitdir};/usr/lib/systemd/user;g' \
    -e 's/^%make_build/%{__make} -O %{?_smp_mflags}/g' \
    -i SPECS/flatpak.spec

パッチを作成します。

> P=SOURCES/autocleanups.patch
> echo "diff -uprN a/common/flatpak-utils.h b/common/flatpak-utils.h" > $P
> echo "--- a/common/flatpak-utils.h 2016-10-25 17:25:46.000000000 +0900" >> $P
> echo "+++ b/common/flatpak-utils.h 2016-12-30 15:40:13.400390490 +0900" >> $P
> echo "@@ -416,6 +416,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRep" >> $P
> echo " G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupSession, g_object_unref)" >> $P
> echo " G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupMessage, g_object_unref)" >> $P
> echo " G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupRequest, g_object_unref)" >> $P
> echo "+G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupRequestHTTP, g_object_unref)" >> $P
> echo " G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupURI, soup_uri_free)" >> $P
> echo " #endif" >> $P
> echo " " >> $P
> sed -e \
 "s/^$B  libxslt-tools/$B  libxslt-tools\nPatch0: autocleanups.patch/g" \
 -e 's/^%setup -q/%setup -q\n%patch0 -p1/g' \
 -i SPECS/flatpak.spec

libelf-develとコンフリクトするlibelf0-develを削除します。BuildRequiresのパッケージをインストールします。

> sudo zypper -n rm libelf0-devel
> sudo zypper -n in $(rpmspec -q SPECS/flatpak.spec --buildrequires)

flatpakをビルドしてインストールします。

> rpmbuild -ba SPECS/flatpak.spec
> sudo zypper -n in RPMS/x86_64/flatpak-*.rpm
> cd

6 Flatpakの実行

org.gnome.geditをインストールします。

wget https://sdk.gnome.org/keys/gnome-sdk.gpg
flatpak --user remote-add --gpg-import=gnome-sdk.gpg gnome \
        https://sdk.gnome.org/repo/
flatpak --user remote-add --gpg-import=gnome-sdk.gpg gnome-apps \
        https://sdk.gnome.org/repo-apps/

flatpak_user_install()
{
  flatpak --user list --runtime --app | grep ${2} > /dev/null && return 0
  while : ; do
    flatpak --user install $@ &
    pid=$!
    sleep 300
    ps -p ${pid} | awk '{ print $1 }' | grep ${pid} > /dev/null || break
    sudo kill -KILL ${pid}
  done
}

flatpak_user_install gnome org.gnome.Platform 3.22
flatpak_user_install gnome org.gnome.Sdk 3.22
flatpak --user install gnome-apps org.gnome.gedit stable

KDE環境でもorg.gnome.geditが動作します。

> flatpak run org.gnome.gedit

0001_org.gnome.gedit.png

7 Flatpakをインストールするスクリプト

以下のスクリプトはostree、bubblewrap、flatpakをインストールします。

#!/bin/sh

F="https://dl.fedoraproject.org/pub/fedora/linux/releases/25"
B="BuildRequires:"
R="Requires:"

opensuse_install_ostree()
{
  wget -q ${F}/Everything/source/tree/Packages/o/ostree-2016.12-1.fc25.src.rpm
  rpm -i ostree-2016.12-1.fc25.src.rpm
  cd ~/rpmbuild
  sed -e "s/^$B\(.*\)pkgconfig(libselinux).*//g" \
      -e "s;^$B\(.*\)/usr/bin/g-ir-scanner;$B\1gobject-introspection-devel;g" \
      -e "s/^$R\(.*\)systemd-units/$R\1systemd/g" \
      -e 's/--with-selinux/--without-selinux/g' \
      -i SPECS/ostree.spec
  sudo zypper -n in $(rpmspec -q SPECS/ostree.spec --buildrequires)
  rpmbuild -ba SPECS/ostree.spec
  sudo zypper -n in RPMS/x86_64/ostree-*.rpm
  cd
}

opensuse_install_bubblewrap()
{
  wget -q ${F}/Everything/source/tree/Packages/b/bubblewrap-0.1.3-2.fc25.src.rpm
  rpm -i bubblewrap-0.1.3-2.fc25.src.rpm
  cd ~/rpmbuild
  sed -e "s;^$B\(.*\)docbook-style-xsl;$B\1docbook-xsl-stylesheets;g" \
      -e 's/^%configure \(.*\)/%configure --disable-selinux \1/g' \
      -e 's/^%make_build/%{__make} -O %{?_smp_mflags}/g' \
      -i SPECS/bubblewrap.spec
  sudo zypper -n in $(rpmspec -q SPECS/bubblewrap.spec --buildrequires)
  rpmbuild -ba SPECS/bubblewrap.spec
  sudo zypper -n in RPMS/x86_64/bubblewrap-*.rpm
  cd
}

opensuse_install_flatpak()
{
  wget -q ${F}/Everything/source/tree/Packages/f/flatpak-0.6.13-1.fc25.src.rpm
  rpm -i flatpak-0.6.13-1.fc25.src.rpm
  cd ~/rpmbuild
  sed -e "s;^$B\(.*\)/usr/bin/xmlto;$B\1xmlto;g" \
      -e "s;^$B\(.*\)/usr/bin/xsltproc;$B\1libxslt-tools;g" \
      -e "s;^$B\(.*\)docbook-style-xsl;$B\1docbook-xsl-stylesheets;g" \
      -e "s/^$B\(.*\)pkgconfig(libelf).*/$B\1libelf-devel/g" \
      -e "s;^$R\(.*\)/usr/bin/tar;$R\1/bin/tar;g" \
      -e 's;%{_pkgdocdir};/usr/share/doc/%{name};g' \
      -e 's;%{_docdir}/%{name};/usr/share/doc/%{name};g' \
      -e 's;%{_userunitdir};/usr/lib/systemd/user;g' \
      -e 's/^%make_build/%{__make} -O %{?_smp_mflags}/g' \
      -i SPECS/flatpak.spec
  P=SOURCES/autocleanups.patch
  echo "diff -uprN a/common/flatpak-utils.h b/common/flatpak-utils.h" > $P
  echo "--- a/common/flatpak-utils.h 2016-10-25 17:25:46.000000000 +0900" >> $P
  echo "+++ b/common/flatpak-utils.h 2016-12-30 15:40:13.400390490 +0900" >> $P
  echo "@@ -416,6 +416,7 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (OstreeRep" >> $P
  echo " G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupSession, g_object_unref)" >> $P
  echo " G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupMessage, g_object_unref)" >> $P
  echo " G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupRequest, g_object_unref)" >> $P
  echo "+G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupRequestHTTP, g_object_unref)" >> $P
  echo " G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupURI, soup_uri_free)" >> $P
  echo " #endif" >> $P
  echo " " >> $P
  sed -e \
   "s/^$B  libxslt-tools/$B  libxslt-tools\nPatch0: autocleanups.patch/g" \
   -e 's/^%setup -q/%setup -q\n%patch0 -p1/g' \
   -i SPECS/flatpak.spec
  sudo zypper -n rm libelf0-devel
  sudo zypper -n in $(rpmspec -q SPECS/flatpak.spec --buildrequires)
  # automake-1.5 might be needed but not used in this time.
  rpmbuild -ba SPECS/flatpak.spec
  sudo zypper -n in RPMS/x86_64/flatpak-*.rpm
  cd
}

sudo zypper -n in rpm-build patterns-openSUSE-devel_basis
opensuse_install_ostree
opensuse_install_bubblewrap
opensuse_install_flatpak