「64ビット環境に32ビット環境をインストール」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「Category:Arch の入手とインストール cs:Install bundled 32-bit system in 64-bit system en:Install bundled 32-bit system in 64-bit system fr:Install...」) |
Kusanaginoturugi (トーク | 投稿記録) (アーカイブ化) タグ: 新規リダイレクト |
||
(3人の利用者による、間の7版が非表示) | |||
1行目: | 1行目: | ||
+ | #redirect [[ArchWiki:アーカイブ]] |
||
− | [[Category:Arch の入手とインストール]] |
||
+ | [[Category:アーカイブ]] |
||
− | [[cs:Install bundled 32-bit system in 64-bit system]] |
||
− | [[en:Install bundled 32-bit system in 64-bit system]] |
||
− | [[fr:Install environnement 32 sur un systeme 64]] |
||
− | [[zh-cn:Install bundled 32-bit system in 64-bit system]] |
||
− | この記事では32ビットのアプリケーションを動作させる一つの方法を説明しています。multilib リポジトリから lib32-* ライブラリをインストールする代わりに32ビットのアプリケーションを分離させます。この方法では "chroot 監獄" を作成して32ビットのアプリを管理します。 |
||
− | |||
− | {{Tip|1=Xyne has created a package that installs a minimalist 32-bit chroot as described below. See [https://bbs.archlinux.org/viewtopic.php?id=97629] and [http://xyne.archlinux.ca/projects/arch32-light] for details.}} |
||
− | |||
− | == インストール == |
||
− | |||
− | 1. ディレクトリを作成: |
||
− | |||
− | # mkdir /opt/arch32 |
||
− | |||
− | 2. chroot 用に一時的な [[pacman]] の設定ファイルを作成: |
||
− | |||
− | # sed -e 's/\$arch/i686/g' /etc/pacman.d/mirrorlist > /opt/arch32/mirrorlist |
||
− | # sed -e 's@/etc/pacman.d/mirrorlist@/opt/arch32/mirrorlist@g' -e '/Architecture/ s,auto,i686,' /etc/pacman.conf > /opt/arch32/pacman.conf |
||
− | |||
− | *These files would conflict with the normal pacman files, which will be installed in the later steps. |
||
− | *For this reason they must be put ''into'' a temporary location ({{ic|/opt/arch32}} is used here). |
||
− | *Remember to delete/comment the multilib repo, if you have enabled it, in the {{ic|/opt/arch32/pacman.conf}} file |
||
− | |||
− | 3. ディレクトリを作成: |
||
− | |||
− | # mkdir -p /opt/arch32/var/{cache/pacman/pkg,lib/pacman} |
||
− | |||
− | 4. pacman を同期: |
||
− | |||
− | # pacman --root /opt/arch32 --cachedir /opt/arch32/var/cache/pacman/pkg --config /opt/arch32/pacman.conf -Sy |
||
− | |||
− | 5. base グループと任意で base-devel グループをインストール: |
||
− | |||
− | # pacman --root /opt/arch32 --cachedir /opt/arch32/var/cache/pacman/pkg --config /opt/arch32/pacman.conf -S base base-devel |
||
− | |||
− | Optionally add your favorite text editor and distcc if you plan to compile within the chroot with other machines: |
||
− | |||
− | # pacman --root /opt/arch32 --cachedir /opt/arch32/var/cache/pacman/pkg --config /opt/arch32/pacman.conf -S base base-devel sudo vim distcc |
||
− | |||
− | Optionally move the pacman mirror list into place: |
||
− | |||
− | # mv /opt/arch32/mirrorlist /opt/arch32/etc/pacman.d |
||
− | |||
− | === 設定 === |
||
− | |||
− | 重要な設定ファイルをコピーしてください: |
||
− | |||
− | # for i in passwd* shadow* group* sudoers resolv.conf localtime locale.gen vimrc mtab inputrc profile.d/locale.sh; do cp -p /etc/"$i" /opt/arch32/etc/; done |
||
− | |||
− | Remember to define the correct the number of MAKEFLAGS and other vars in {{ic|/opt/arch32/etc/makepkg.conf}} before attempting to build. |
||
− | |||
− | === デーモンと systemd サービス === |
||
− | {{hc|/etc/systemd/system/arch32.service|<nowiki> |
||
− | [Unit] |
||
− | Description=32-bit chroot |
||
− | |||
− | [Service] |
||
− | Type=oneshot |
||
− | RemainAfterExit=yes |
||
− | ExecStart=/usr/local/bin/arch32 start |
||
− | ExecStop=/usr/local/bin/arch32 stop |
||
− | |||
− | [Install] |
||
− | WantedBy=multi-user.target |
||
− | </nowiki>}} |
||
− | |||
− | {{hc|/usr/local/bin/arch32|<nowiki> |
||
− | #!/bin/bash |
||
− | |||
− | ## User variables. |
||
− | MOUNTPOINT=/opt/arch32 |
||
− | |||
− | ## Set MANAGEPARTITION to any value if /opt/arch32 resides on a separate |
||
− | ## partition and not mounted by /etc/fstab or some other means. |
||
− | ## If /opt/arch32 is part of your rootfs, leave this empty. |
||
− | MANAGEPARTITION= |
||
− | |||
− | ## Leave USEDISTCC empty unless you wish to use distccd from within the chroot. |
||
− | USEDISTCC= |
||
− | DISTCC_SUBNET='10.9.8.0/24' |
||
− | |||
− | ## PIDFILE shouldn't need to ba changed from this default. |
||
− | PIDFILE=/run/arch32 |
||
− | |||
− | start_distccd() { |
||
− | [[ ! -L "$MOUNTPOINT"/usr/bin/distccd-chroot ]] && |
||
− | ln -s /usr/bin/distccd "$MOUNTPOINT"/usr/bin/distccd-chroot |
||
− | DISTCC_ARGS="--user nobody --allow $DISTCC_SUBNET --port 3692 --log-level warning --log-file /tmp/distccd-i686.log" |
||
− | |||
− | [[ -z "$(pgrep distccd-chroot)" ]] && |
||
− | linux32 chroot "$MOUNTPOINT" /bin/bash -c "/usr/bin/distccd-chroot --daemon $DISTCC_ARGS" |
||
− | } |
||
− | |||
− | stop_distccd() { |
||
− | [[ -n "$(pgrep distccd-chroot)" ]] && |
||
− | linux32 chroot "$MOUNTPOINT" /bin/bash -c "pkill -SIGTERM distccd-chroot" |
||
− | } |
||
− | |||
− | case $1 in |
||
− | start) |
||
− | [[ -f "$PIDFILE" ]] && exit 1 |
||
− | |||
− | if [[ -n "$MANAGEPARTITION" ]]; then |
||
− | mountpoint -q $MOUNTPOINT || mount LABEL="arch32" $MOUNTPOINT |
||
− | fi |
||
− | |||
− | dirs=(/tmp /dev /dev/pts /home) |
||
− | for d in "${dirs[@]}"; do |
||
− | mount -o bind $d "$MOUNTPOINT"$d |
||
− | done |
||
− | |||
− | mount -t proc none "$MOUNTPOINT/proc" |
||
− | mount -t sysfs none "$MOUNTPOINT/sys" |
||
− | touch "$PIDFILE" |
||
− | [[ -n "$USEDISTCC" ]] && start_distccd |
||
− | ;; |
||
− | |||
− | stop) |
||
− | [[ ! -f "$PIDFILE" ]] && exit 1 |
||
− | [[ -n "$USEDISTCC" ]] && stop_distccd |
||
− | |||
− | if [[ -n "$MANAGEPARTITION" ]]; then |
||
− | umount -R -A -l "$MOUNTPOINT" |
||
− | else |
||
− | dirs=(/home /dev/pts /dev /tmp) |
||
− | [[ -n "$USEDISTCC" ]] && stop_distccd |
||
− | umount "$MOUNTPOINT"/{sys,proc} |
||
− | for d in "${dirs[@]}"; do |
||
− | umount -l "$MOUNTPOINT$d" |
||
− | done |
||
− | fi |
||
− | |||
− | rm -f "$PIDFILE" |
||
− | ;; |
||
− | *) |
||
− | echo "usage: $0 (start|stop)" |
||
− | exit 1 |
||
− | esac |
||
− | </nowiki>}} |
||
− | |||
− | 初期化スクリプトに実行可能属性を付与してください: |
||
− | # chmod +x /usr/local/bin/arch32 |
||
− | |||
− | {{ic|arch32.service}} を[[起動]]・[[有効化]]してください。 |
||
− | |||
− | == 設定 == |
||
− | |||
− | 新しい環境に chroot: |
||
− | |||
− | # /usr/local/bin/arch32 start |
||
− | $ xhost +SI:localuser:username_to_give_access_to |
||
− | # chroot /opt/arch32 |
||
− | |||
− | It is recommended to use a custom bash prompt inside the 32-bit chroot installation in order to differentiate from the regular system. You can, for example, add a ''ARCH32'' string to the ''PS1'' variable defined in {{ic|~/.bashrc}}. In fact, the default Debian .bashrc prompt string contains appropriate logic to report whether the working directory is within a chroot. |
||
− | |||
− | === 初期設定 === |
||
− | |||
− | ロケールの問題を修正: |
||
− | |||
− | # /usr/bin/locale-gen |
||
− | |||
− | pacman を初期化: |
||
− | |||
− | # sed -i 's/CheckSpace/#CheckSpace/' /etc/pacman.conf |
||
− | # pacman-key --init && pacman-key --populate archlinux |
||
− | |||
− | == Schroot == |
||
− | |||
− | {{Pkg|schroot}} をネイティブの'''64ビット'''環境に[[pacman|インストール]]: |
||
− | |||
− | {{ic|/etc/schroot/schroot.conf}} を編集して ''[Arch32]'' セクションを作成して下さい。 |
||
− | |||
− | [Arch32] |
||
− | type=directory |
||
− | profile=arch32 |
||
− | description=Arch32 |
||
− | directory=/opt/arch32 |
||
− | users=user1,user2,user3 |
||
− | groups=users |
||
− | root-groups=root |
||
− | personality=linux32 |
||
− | aliases=32,default |
||
− | |||
− | Optionally edit {{ic|/etc/schroot/arch32/mount}} to match the mounts created within {{ic|/usr/local/bin/arch32}}. |
||
− | |||
− | === Schroot を使って32ビットのアプリケーションを実行 === |
||
− | |||
− | The general syntax for calling an application ''inside'' the chroot is: |
||
− | |||
− | # schroot -p -- htop |
||
− | |||
− | In this example, htop is called from within the 32-bit environment. |
||
− | |||
− | == トラブルシューティング == |
||
− | |||
− | === コンパイルとインストール === |
||
− | |||
− | Ensure the desired options are set in the local {{ic|/etc/makepkg.conf}}. |
||
− | |||
− | Some packages may require a {{ic|--host}} flag be added to the ./configure script in the PKBUILD: |
||
− | |||
− | $ ./configure --host="i686-pc-linux" ... |
||
− | |||
− | This is the case when the build makes use of values (for example, the output of the {{ic|uname}} command) inherited from your base system. |
||
− | |||
− | ===ビデオ問題=== |
||
− | |||
− | If you get: |
||
− | |||
− | X Error of failed request: BadLength (poly request too large or internal Xlib length error) |
||
− | |||
− | while trying to run an application that requires video acceleration, make sure you have installed appropriate [[video drivers]] in your chroot. |
||
− | |||
− | === Flash の音声 === |
||
− | |||
− | To get sound from the flash player in Firefox, open a terminal and chroot inside the 32-bit system: |
||
− | |||
− | # chroot /opt/arch32 |
||
− | |||
− | From there, install {{Pkg|alsa-oss}} as usual with [[pacman]]. |
||
− | |||
− | Then type: |
||
− | |||
− | $ export FIREFOX_DSP="aoss" |
||
− | |||
− | Every chroot into the 32-bit system will require this export command to be entered so it may be best to incorporate it into a script. |
||
− | |||
− | Finally, launch Firefox. |
||
− | |||
− | For [[Wine]] this works the same way. The package alsa-oss will also install the alsa libs required by [[Wine]] to output sound. |
||
− | |||
− | == Tips and tricks == |
||
− | |||
− | === chroot の Java === |
||
− | |||
− | See [[Java]]. After installation, adjust the path: |
||
− | |||
− | $ export PATH="/opt/java/bin/:$PATH" |
||
− | |||
− | === 32ビットアプリケーションから64ビットの PulseAudio にアクセス === |
||
− | |||
− | Additional paths have to be bind-mounted to the chroot environment: |
||
− | |||
− | # mount --bind /var/run /opt/arch32/var/run |
||
− | # mount --bind /var/lib/dbus /opt/arch32/var/lib/dbus |
||
− | |||
− | Unmount them when leaving the environment: |
||
− | |||
− | # umount /opt/arch32/var/run |
||
− | # umount /opt/arch32/var/lib/dbus |
||
− | |||
− | Optionally add the commands to the {{ic|/usr/local/bin/arch32}} script after the other bind-mount/umount commands. See [[PulseAudio/Examples#PulseAudio_from_within_a_chroot_.28e.g._32-bit_chroot_in_64-bit_install.29|PulseAudio from within a chroot]] for details |
||
− | |||
− | === Firefox の音声 === |
||
− | |||
− | Create {{ic|/usr/bin/firefox32}} as root: |
||
− | |||
− | #!/bin/sh |
||
− | schroot -p firefox $1;export FIREFOX_DSP="aoss" |
||
− | |||
− | Make it executable: |
||
− | |||
− | # chmod +x /usr/bin/firefox32 |
||
− | |||
− | Now you can make an alias for Firefox, if desired: |
||
− | |||
− | alias firefox="firefox32" |
||
− | |||
− | Add this to {{ic|~/.bashrc}} and source it to enable it. Or you can just change all your desktop environment's launchers to firefox32 if you still want 64-bit Firefox to be available. |
||
− | |||
− | === 3D アクセラレーション === |
||
− | |||
− | You need to install the corresponding package under your "native" arch for 3D support. |
||
− | |||
− | For information on how to set up your graphic adapter refer to: |
||
− | |||
− | * [[ATI]] |
||
− | * [[Intel]] |
||
− | * [[NVIDIA]] |
||
− | |||
− | === Wine === |
||
− | |||
− | In order to compile wine, you need a 32-bit system installed. Compiling wine is needed for applying patches in order to get [http://art.ified.ca/?page_id=40 PulseAudio] working. See also {{AUR|wine-hacks}} from AUR. |
||
− | |||
− | Add the following alias to {{ic|~/.bashrc}}: |
||
− | |||
− | alias wine='schroot -pqd "$(pwd)" -- wine' |
||
− | |||
− | The {{ic|-q}} switch makes schroot operate in quiet mode, so it works like "regular" wine does. Also note that If you still use dchroot instead of schroot, you should use switch {{ic|-d}} instead of {{ic|-s}}. |
||
− | |||
− | === 印刷 === |
||
− | |||
− | {{note|If you have a 64-bit base installation with a [[Install_bundled_32-bit_system_in_Arch64|32-bit chroot environment]], explicit installation of CUPS is not necessary in the 32-bit environment.}} |
||
− | |||
− | To access installed CUPS printers from the chroot environment, one needs to bind the {{ic|/var/run/cups}} directory to the same (relative) location in the chroot environment. |
||
− | |||
− | Simply make sure the {{ic|/var/run/cups}} directory exists in the chroot environment and bind-mount the host {{ic|/var/run/cups}} to the chroot environment: |
||
− | |||
− | # mkdir ''chroot32-dir/var/run/cups'' |
||
− | # mount --bind /var/run/cups ''chroot32-dir/var/run/cups'' |
||
− | |||
− | and printers should be available from 32-bit chroot applications immediately. |
2024年9月7日 (土) 19:35時点における最新版
転送先: