同じアプリケーションを使用するために OS を統合しますか?

同じアプリケーションを使用するために OS を統合しますか?

私はUbuntu GNOME 20.04とKubuntu 21.04を使用しています。両方とも別々のパーティションにあります。両方のOSで作業を行う必要がありますが、そのためにはコンピューターを再起動してから、起動する他のOSを選択する必要があります。

そこで、Ubuntu でも使用されている Kubuntu にインストールされたアプリケーションを、Ubuntu に同じソフトウェアを再度インストールせずに共有し、オペレーティング システムを切り替える必要がない方法があるかどうかを知りたいのです。

答え1

いいえ、実際はそうではありません。異なるバージョンの 2 つのオペレーティング システムがあり、別のバージョンのバイナリを別のオペレーティング システムで使用できるように設定することは、1) バイナリの非互換性や依存関係が間違っているか利用できないなどの理由で、多くの場合不可能になります。または、2) 設定が技術的に非常に複雑になり、予期しない問題が発生するリスクがさらに高くなります。

はい、原理的には、他のオペレーティング システムのシステム パーティションをマウントし、いくつかの単純なバイナリを他のオペレーティング システムで直接実行できます。ただし、バイナリの大部分ははるかに複雑で、特定のシステム構成と依存関係に依存します。別のオペレーティング システムから実行しようとしても実行されません。Linux に非常に精通している人なら、趣味としてこれの一部を実行できる可能性があります。これは、すべてのアプリケーションごとに個別に繰り返す必要がある作業です。

では、Kubuntu にインストールされたアプリケーションを Ubuntu でも共有し、同じソフトウェアを Ubuntu に再度インストールせずに、OS を切り替える必要がないようにする方法はありますか。

ここに書いた通り、そうです。

単一のオペレーティング システムを維持し、標準の Ubuntu のシェルである Gnome Shell と、Kubuntu のシェルである KDE Plasma の両方をそのオペレーティング システムにインストールします。インストールしたアプリケーションは、どのデスクトップにログインしていても利用できるようになります。

答え2

はい、chroot を使用して複数の Ubuntu インストールから同時にソフトウェアを実行できます。ただし、いくつか注意点があります。

  • すべてのプログラムは単一のカーネルの下で実行されます。
  • chroot 内のプログラムは、デフォルトではメイン OS では使用できません。それらを起動するには、ラッパー スクリプトを作成する必要があります。
  • スムーズに動作させるには、いくつかの調整が必要になる場合があります。少なくとも、ファイルの所有権/ユーザー/グループを一致させる必要があります。以下に示す内容は、私のシステムでは機能します。予想できない追加の調整が必要になる可能性があります。

chroot を設定するには、次の手順を実行する必要があります。

  • Kubuntu インストールを起動します。

  • インストールschroot

    apt-get install schroot
    

    ユーザー名を変更し/etc/schroot/schroot.confて次の内容を追加します。USERNAME

    [gnome]
    description=Ubuntu 20.04
    directory=/chroot/gnome
    users=USERNAME
    groups=root
    root-groups=USERNAME
    
  • chroot のルート ディレクトリを追加します/etc/fstab(下の 2 行目)。次に、システム ディレクトリのバインド マウントと、使用している非標準マウントを追加します。特別なマウント オプションが必要な場合は、それも追加します。例:

    /.media        /media                  none  defaults,bind,noauto             0  0
    LABEL=gnome    /chroot/gnome           ext4  defaults,auto,errors=remount-ro  0  0
    /proc          /chroot/gnome/proc      none  defaults,rbind,noauto            0  1
    /dev           /chroot/gnome/dev       none  defaults,rbind,noauto            0  1
    /sys           /chroot/gnome/sys       none  defaults,rbind,noauto            0  1
    /var/run/dbus  /chroot/gnome/run/dbus  none  defaults,rbind,noauto            0  1
    /var/lock      /chroot/gnome/run/lock  none  defaults,rbind,noauto            0  1
    /var/tmp       /chroot/gnome/var/tmp   none  defaults,rbind,noauto            0  1
    /tmp           /chroot/gnome/tmp       none  defaults,rbind,noauto            0  1
    /home          /chroot/gnome/home      none  defaults,rbind,noauto            0  1
    /media         /chroot/gnome/media     none  defaults,rbind,noauto            0  1
    
  • ディレクトリを作成します:

    mkdirhier /.media /chroot/gnome
    chmod 755 /.media /chroot /chroot/gnome
    chown root.root /.media /chroot /chroot/gnome
    
  • 以下を に追加します/etc/rc.local:

    # Make mounts shared
    
    mount /.media  || true
    mount /media   || true
    
    /bin/mount --make-rshared /.media || true
    
    # If you have any static mounts under /media, add mount commands for
    # them here and set them to noauto in /etc/fstab
    
    # Mount system directories
    
    mount /chroot/gnome/proc     || true
    mount /chroot/gnome/dev      || true
    mount /chroot/gnome/sys      || true
    mount /chroot/gnome/run/dbus || true
    mount /chroot/gnome/run/lock || true
    mount /chroot/gnome/var/tmp  || true
    mount /chroot/gnome/tmp      || true
    mount /chroot/gnome/home     || true
    mount /chroot/gnome/media    || true
    
    # Additional tweaks
    # (These might not be needed on your system)
    
    # Start udevd under gnome
    # Audio on Chrome won't work without this
    ( schroot -c gnome -p -u root /etc/init.d/udev start ) || true
    
    # Fix pulseaudio
    killall pulseaudio  || true
    
  • ログイン時に追加の調整を適用する必要があるかもしれません。必要/適切な場合は、次のシェル スクリプトを作成し、ログイン時、つまりデスクトップ環境 (KDE または Gnome) の起動時に実行されるように設定します。

    #!/bin/sh
    
    # Fix Pulse Audio
    while pidof pulseaudio ; do
        killall pulseaudio
        sleep 1
    done
    schroot -p -c gnome start-pulseaudio-x11 
    
    # Uncomment this if you're running KDE4 in the chroot
    #schroot -p -c KDE4_chroot kded4 &
    
    # (additional tweaks may be needed)
    
  • 2 つのインストール間でユーザーとグループを一致させます。ユーザー (およびそのグループ) が 2 つのインストールで同じ UID と GID を持つようにするだけで、おそらく問題は解決します。chroot の 、および で適切な UID と GID を更新する必要があります/etc/passwd(/etc/group古い/etc/shadowUID と GID をメモしておきます)。それが完了したら、chroot ファイルシステムの数値 ID を更新します。findコマンドの-execオプションと がchownここchgrpで役立ちます。

  • chroot で実行するデーモンがある場合は、次の init スクリプト ( /etc/init.d/DAEMON_NAME、DAEMON_NAME を適宜変更) を作成し、実行可能にします。

    #!/bin/sh
    set -e
    schroot -p -c gnome -u root /etc/init.d/DAEMON_NAME $@
    exit 0
    

    次に、 の末尾に次のコードを追加します/etc/rc.local

    /etc/init.d/DAEMON_NAME restart
    
  • 通常のユーザーとして実行したい chroot 内のプログラムを起動するためのシェル スクリプトを追加します。実行可能にすることを忘れないでください。必要に応じて、ラッパー スクリプトを起動するためのデスクトップ アイコンを追加できます。例:

    /usr/local/bin/chrome_gnome:

    #!/bin/sh
    
    mkdir $HOME/.chrome_gnome || true
    schroot -p -c gnome -- google-chrome --user-data-dir=$HOME/.chrome_gnome "$@"
    
  • システムを再起動すると、すべてが機能するはずです。chroot でコマンドを実行するには、前の手順で設定したラッパーを使用するか、schroot ...コマンドラインからコマンドを手動で実行します。

上記のすべてをシステムに合わせて調整する必要があります。たとえば、2 つのホーム ディレクトリの内容を、両方のインストールでマウントされた 1 つのディレクトリにマージする必要があります。バインド マウントを行う前 (または再起動する前) にこの操作を行ってください。マウント ポイントの下にある既存のファイルは、バインド マウントを行うと表示されなくなります (ディスク上には存在しますが、アクセスできなくなります)。

chroot 内でソフトウェアをインストールまたは更新する必要がある場合は、 などを使用して、通常どおりにschroot -p -c gnome -u root実行しますapt

追加の並行 Ubuntu インストールを行うことができます。 を使用してdebootstrap新しいディレクトリに初期インストールを実行し、上記のように追加します。


chroot されたアプリケーション内のリンクをクリックして、ベース OS のデフォルト ハンドラーを使用して開くことができるようにするには、さらにいくつかの変更を加える必要があります。これを行った後、chroot された OS を直接起動すると、正しく動作しないことに注意してください。

  • シェル スクリプトを作成し/usr/local/bin/xdg-open-relay-receive、実行可能にします。

     #!/bin/sh
    
     mkfifo -m 666 /tmp/xdg-open-relay
    
     tail -f "/tmp/xdg-open-relay" | while read line
     do
             xdg-open "$line"
     done
    

    上記を編集して、 の権限を強化する必要があるかもしれません/tmp/xdg-open-relay

  • ログイン時に実行するために作成したスクリプトの最後に次のコードを追加します。

     killall xdg-open-relay-receive
     nohup /usr/local/bin/xdg-open-relay-receive &
    
  • chroot のxdg-openコマンドを新しいシェル スクリプトに置き換えます。

    • mv /chroot/gnome/usr/bin/xdg-open /chroot/gnome/usr/bin/xdg-open.DISABLED

    • 以下を記述して/chroot/gnome/usr/bin/xdg-open実行可能にします。

      #!/bin/sh
      echo "$@" > /tmp/xdg-open-relay
      

答え3

多くのアプリは、アプリが生成するデータ (Minecraft の世界、画像、kdenlive のビデオ編集など) を保存するために /home ディレクトリを使用します。そのため、Ubuntu の /home に別のパーティションを作成し、インストール時に再フォーマットせずに同じユーザー名/パスワードを入力せずに、同じパーティションを Kubuntu で使用すると、2 つのバリアント間でアプリ設定が同じになります。この方法でアプリを共有することは困難ですが、少なくとも設定は共有されるはずです。

ソース:https://unix.stackexchange.com/questions/442495/different-linux-distros-sharing-applications

実用的なヒント:https://unix.stackexchange.com/questions/6344/異なるlinuxディストリビューションが同じホームフォルダーを共有している受け入れられた回答

関連情報