#!/bin/sh # Build an OpenMandriva chroot (possibly including qemu setup) # Usage: # mkchroot [-v VERSION] [-a ARCH] Directory # Default: # VERSION=cooker # ARCH=host arch if [ "$(id -u)" != '0' ]; then exec sudo $0 "$@" exit 1 fi usage() { cat <PACKAGES PRE_PACKAGES="distro-release-repos distro-release-repos-keys" for i in $PRE_PACKAGES; do P=$(grep "^$i-[0-9].*" PACKAGES) if [ "$?" != "0" ]; then echo "Can't find $i package for target" >&2 exit 1 fi curl -O $PKGS/$P rpm -r "$ROOTDIR" -Uvh --ignorearch --nodeps $P done # Set up qemu if necessary case "$ARCH" in znver1) QEMUARCH=x86_64 ;; i?86) QEMUARCH=i386 ;; arm*) QEMUARCH=arm ;; *) QEMUARCH="$ARCH" ;; esac case "$(uname -m)" in znver1) HOSTARCH=x86_64 ;; i?86) HOSTARCH=i386 ;; arm*) HOSTARCH=arm ;; *) HOSTARCH="$(uname -m)" ;; esac CHROOT_COMMAND="chroot" if [ "$HOSTARCH" = "$QEMUARCH" ]; then # No qemu needed... unset QEMUARCH elif [ "$HOSTARCH" = "x86_64" ] && [ "$QEMUARCH" = "i386" ]; then # Also no need for qemu -- setarch and friends are enough unset QEMUARCH CHROOT_COMMAND="i386 chroot" elif [ "$HOSTARCH" = "aarch64" ] && [ "$QEMUARCH" = "arm" ]; then # FIXME is there any way to tell a 64-bit-only CPU apart from # a regular aarch64 CPU that can handle 32bit code??? # For now, let's assume we're on a regular CPU... unset QEMUARCH CHROOT_COMMAND="linux32 chroot" fi if [ -n "$QEMUARCH" ]; then dnf -y install qemu-$QEMUARCH-static || : mkdir -p $ROOTDIR/usr/bin cp /usr/bin/qemu-$QEMUARCH-static $ROOTDIR/usr/bin/ fi # FIXME allow better package selection PACKAGES="basesystem task-devel rpm-build dnf bash" if ! dnf -y install --installroot=$ROOTDIR --releasever=$OMV_VERSION --forcearch=$ARCH --refresh $PACKAGES; then echo "Failed to install packages, probably there are dependency problems." rm -rf $ROOTDIR exit 1 fi # This should be there already, but better safe than sorry mkdir $ROOTDIR/home &>/dev/null || : cp -f /etc/passwd /etc/shadow /etc/group $ROOTDIR/etc for i in /dev /dev/shm /dev/pts /proc /sys /home; do echo "$i $ROOTDIR$i none bind 0 0" >>/etc/fstab mount "$ROOTDIR$i" done echo "Done -- you can enter the chroot environment using" echo " $CHROOT_COMMAND $ROOTDIR"