New Build VM configuration script added.

This commit is contained in:
Scott Duensing 2022-09-20 20:11:26 -05:00
parent c60a5e5a55
commit bd1b158a87

517
scripts/buildVm.sh Executable file
View file

@ -0,0 +1,517 @@
#!/bin/bash -xe
#
# JoeyLib
# Copyright (C) 2018-2021 Scott Duensing <scott@kangaroopunch.com>
#
# This software is provided 'as-is', without any express or implied
# warranty. In no event will the authors be held liable for any damages
# arising from the use of this software.
#
# Permission is granted to anyone to use this software for any purpose,
# including commercial applications, and to alter it and redistribute it
# freely, subject to the following restrictions:
#
# 1. The origin of this software must not be misrepresented; you must not
# claim that you wrote the original software. If you use this software
# in a product, an acknowledgment in the product documentation would be
# appreciated but is not required.
# 2. Altered source versions must be plainly marked as such, and must not be
# misrepresented as being the original software.
# 3. This notice may not be removed or altered from any source distribution.
#
SRC=${HOME}/joeylib/joeylib/src
IIGS=${HOME}/cross/gsos-wdc-orca
SDL2_OLD=25f9ed87ff6947d9576fc9d79dee0784e638ac58
SDL2_NEW=97a5e744497ff7cc93edc5119d67cad3ee86dd57
OLD_PATH=${PATH}
export GOLDEN_GATE=${IIGS}/ORCA
function buildIIgsSDK() {
local GGATE=$1
local ORCA=$2
local PUBLIC=$3
local PRIVATE=$4
local GGUSER=$5
local GGPASS=$6
local RESULT=
local O=
mkdir -p "${IIGS}/ORCA"
chmod 777 "${IIGS}/ORCA"
mkdir -p ~/.ssh
cp -f "${PUBLIC}" ~/.ssh/id_rsa.pub
cp -f "${PRIVATE}" ~/.ssh/id_rsa
touch ${HOME}/.ssh/authorized_keys
touch ${HOME}/.ssh/config
chmod go-w ${HOME}
chmod 700 ${HOME}/.ssh
chmod 600 ${HOME}/.ssh/*id_rsa
chmod 644 ${HOME}/.ssh/*.pub
chmod 644 ${HOME}/.ssh/authorized_keys
chmod 644 ${HOME}/.ssh/config
if [[ ! -e "${IIGS}/jfsDrive.img" ]]; then
O=${IIGS}/mountORCA.sh
echo "#!/bin/bash" > "${O}"
echo "IIGS=${IIGS}" >> "${O}"
echo "if ! mount | grep \${IIGS}/ORCA | grep -q jfs; then" >> "${O}"
echo -e "\tfsck.jfs -a \${IIGS}/jfsDrive.img" >> "${O}"
echo -e "\tsudo mount -t jfs \${IIGS}/jfsDrive.img \${IIGS}/ORCA" >> "${O}"
echo -e "\techo MOUNT=\${IIGS}/ORCA >> \${IIGS}/lastMount.cfg" >> "${O}"
echo "fi" >> "${O}"
chmod +x "${O}"
O=${IIGS}/unmountORCA.sh
echo "#!/bin/bash" > "${O}"
echo "IIGS=${IIGS}" >> "${O}"
echo "if [[ -e \${IIGS}/lastMount.cfg ]]; then" >> "${O}"
echo -e "\tsource \${IIGS}/lastMount.cfg" >> "${O}"
echo -e "\tsudo umount \${MOUNT}" >> "${O}"
echo -e "\trm \${IIGS}/lastMount.cfg" >> "${O}"
echo "fi" >> "${O}"
chmod +x "${O}"
fallocate -l 32M "${IIGS}/jfsDrive.img"
mkfs.jfs -O -q -L IIgs "${IIGS}/jfsDrive.img"
fi
"${IIGS}/mountORCA.sh"
sudo chown $(id -ru):$(id -rg) "${IIGS}/ORCA/."
if [[ ! -d GoldenGate ]]; then
ssh-keygen -F gitlab.com || ssh-keyscan gitlab.com > ~/.ssh/known_hosts
git config --global credential.helper cache
git clone https://${GGUSER}:${GGPASS}@gitlab.com/GoldenGate/GoldenGate.git
fi
pushd GoldenGate
git submodule init
git submodule update
mkdir -p build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/installed ..
make
make install
mkdir -p ${IIGS}
cp -f bin/{iix,dumpobj,opus-extractor} "${IIGS}/."
cd installed
msiextract "${HOME}/${GGATE}"
find -name ".*" -delete
cp -rf GoldenGate/* "${IIGS}/ORCA/."
popd
isoinfo -i "${ORCA}" -x /FOR_EMUL/BYTEWORK.S\;1 > BYTEWORKS
"${IIGS}/opus-extractor" -v BYTEWORKS "${IIGS}/ORCA"
rm BYTEWORKS
fetchGitHubRelease RESULT byteworksinc ORCA-C 2mg
"${IIGS}/opus-extractor" -v -s / ${RESULT} "${IIGS}/ORCA"
export PATH=${OLD_PATH}:${IIGS}
pushd ${GOLDEN_GATE}
for O in etc/* ; do iix chtyp -t txt "${O}" ; done
for O in lib/* ; do if [ -f "${O}" ] ; then iix chtyp -t lib "${O}" ; fi ; done
for O in usr/lib/lib* ; do iix chtyp -t lib "${O}" ; done
for O in usr/lib/tmac/* ; do iix chtyp -t txt "${O}" ; done
for O in bin/* ; do iix chtyp -t exe "${O}" ; done
for O in usr/bin/* ; do iix chtyp -t exe "${O}" ; done
for O in usr/local/bin/* ; do iix chtyp -t exe "${O}" ; done
for O in Languages/* ; do if [ -f "${O}" ] ; then iix chtyp -t exe "${O}" ; fi ; done ;
for O in Utilities/Help/* ; do if [ -f "${O}" ] ; then iix chtyp -t txt "${O}" ; fi ; done ;
for O in Utilities/* ; do if [ -f "${O}" ] ; then iix chtyp -t exe "${O}" ; fi ; done ;
for O in Libraries/* ; do if [ -f "${O}" ] ; then iix chtyp -t lib "${O}" ; fi ; done ;
for O in Libraries/AInclude/* ; do if [ -f "${O}" ] ; then iix chtyp -t txt "${O}" ; fi ; done ;
for O in Libraries/APWCInclude/* ; do if [ -f "${O}" ] ; then iix chtyp -t txt "${O}" ; fi ; done ;
for O in Libraries/AppleUtil/* ; do if [ -f "${O}" ] ; then iix chtyp -t txt "${O}" ; fi ; done ;
for O in Libraries/ORCACDefs/* ; do if [ -f "${O}" ] ; then iix chtyp -l cc "${O}" ; fi ; done ;
for O in Libraries/ORCAInclude/* ; do if [ -f "${O}" ] ; then iix chtyp -l asm "${O}" ; fi ; done ;
for O in Libraries/RInclude/* ; do if [ -f "${O}" ] ; then iix chtyp -l rez "${O}" ; fi ; done ;
for O in Libraries/Tool.Interface/* ; do if [ -f "${O}" ] ; then iix chtyp -l pascal "${O}" ; fi ; done ;
for O in Libraries/GSoftDefs/* ; do if [ -f "${O}" ] ; then iix chtyp -t 0x5e -a 0x8007 "${O}" ; fi ; done ;
for O in Libraries/ORCAPascalDefs/* ; do if [ -f "${O}" ] ; then iix chtyp -t 0x5e -a 0x8009 "${O}" ; fi ; done ;
for O in Libraries/m2defs/* ; do if [ -f "${O}" ] ; then iix chtyp -t 0x5e -a 0x8006 "${O}" ; fi ; done ;
popd
export PATH=${OLD_PATH}
if [[ ! -d cadius ]]; then
git clone https://skunkworks.kangaroopunch.com/mirrors/cadius.git
pushd cadius
make
mkdir -p "${IIGS}/cadius"
cp -f bin/release/cadius "${IIGS}/cadius/."
popd
fi
if [[ ! -e "${IIGS}/ntpconverter/ntpconverter.php" ]]; then
download http://www.ninjaforce.com/downloads/ntconverter.zip
unzip ntconverter.zip
mkdir -p "${IIGS}/ntpconverter"
cp -f ntconverter.php "${IIGS}/ntpconverter/ntpconverter.php"
fi
if [[ ! -e "${IIGS}/Tool222#ba0000" ]]; then
download http://www.ninjaforce.com/downloads/ninjatrackerplus_tool222_v1.4.2mg
"${IIGS}/cadius/cadius" extractfile ninjatrackerplus_tool222_v1.4.2mg NTP.TOOL222V1.4/SYSTEM/TOOLS/TOOL222 .
cp -f "TOOL222#BA0000" "${IIGS}/Tool222#ba0000"
fi
"${IIGS}/unmountORCA.sh"
if [[ ! -e "${IIGS}/jfsDrive.img.backup.tar.bz2" ]]; then
tar cjf "${IIGS}/jfsDrive.img.backup.tar.bz2" "${IIGS}/jfsDrive.img"
fi
}
function buildJoeyLib() {
OLD_CFLAGS=${CFLAGS}
if [[ ! -d joeylib ]]; then
git clone https://skunkworks.kangaroopunch.com/skunkworks/joeylib.git
fi
rm -rf dist/${NAME}-${ARCH} && true
mkdir -p dist/${NAME}-${ARCH}
pushd dist/${NAME}-${ARCH}
case ${BACKEND} in
orca)
local OUT=${GOLDEN_GATE}/out/joey
rm -rf ${OUT} && true
mkdir -p ${OUT}/out/joey
pushd ${SRC}
iix assemble jIIgs.asm keep=31:/out/joey/jIIgsasm
iix compile jIIgs.c keep=31:/out/joey/jIIgsc
iix compile joey.c keep=31:/out/joey/joey
popd
cp -f "${OUT}/jIIgsc.root" "jIIgsc.root#b10000"
cp -f "${OUT}/jIIgsc.a" "jIIgsc.a#b10000"
cp -f "${OUT}/jIIgsasm.root" "jIIgsasm.root#b10000"
cp -f "${OUT}/jIIgsasm.a" "jIIgsasm.a#b10000"
cp -f "${OUT}/joey.a" "joey.a#b10000"
cp -f "${IIGS}/Tool222#ba0000" .
;;
SDL2)
export CFLAGS="${CFLAGS} -Wall -D_REENTRANT_ -I${SRC} -I${INSTALLED}/include -c"
${CC} ${CFLAGS} -o jPixBuf.o ${SRC}/jPixBuf.c
${CC} ${CFLAGS} -o jSDL2.o ${SRC}/jSDL2.c
${CC} ${CFLAGS} -o joey.o ${SRC}/joey.c
${AR} x ${INSTALLED}/lib/libSDL2.a
${AR} x ${INSTALLED}/lib/libSDL2main.a
${AR} rcs libjoeylib.a *.o
rm *.o
rm __.SYMDEF* && true
;;
esac
cp -f ${SRC}/joey.h ../.
popd
export CFLAGS=${OLD_CFLAGS}
}
function buildMacOSSDK() {
local SDK=$1
local NAME=$2
if [[ ! -d osxcross ]]; then
git clone https://skunkworks.kangaroopunch.com/mirrors/osxcross.git
fi
pushd osxcross
cp -f ../"${SDK}" tarballs/.
UNATTENDED=1 ./build.sh
sudo ENABLE_COMPILER_RT_INSTALL=1 ./build_compiler_rt.sh
mkdir -p ../cross/${NAME}
mv -f target/* ../cross/${NAME}
sudo mv -f /usr/lib/llvm-10/lib/clang/10.0.0/lib/darwin ../cross/${NAME}/.
./cleanup.sh
popd
}
function buildSDL2() {
local TAG=$1
if [[ ! -d SDL ]]; then
git clone https://skunkworks.kangaroopunch.com/mirrors/SDL.git
fi
pushd SDL
git checkout ${TAG}
popd
clearBuild
pushd build
../SDL/configure \
--target=${TRIPLE} \
--host=${TRIPLE} \
--build=x86_64-linux \
--enable-static \
--disable-shared \
--disable-video-wayland \
--disable-render-metal \
--disable-video-metal \
--prefix=${INSTALLED}
make
make install
popd
}
function clearBuild() {
rm -rf build && true
mkdir -p build
}
function configureSFTP() {
sudo addgroup sftponly && true
echo "Match Group sftponly" | sudo tee /etc/ssh/sshd_config.d/sftponly.conf
echo -e "\tChrootDirectory %h" | sudo tee -a /etc/ssh/sshd_config.d/sftponly.conf
echo -e "\tForceCommand internal-sftp" | sudo tee -a /etc/ssh/sshd_config.d/sftponly.conf
echo -e "\tAllowTcpForwarding no" | sudo tee -a /etc/ssh/sshd_config.d/sftponly.conf
echo -e "\tX11Forwarding no" | sudo tee -a /etc/ssh/sshd_config.d/sftponly.conf
sudo systemctl restart sshd
# Read for user creation: https://askubuntu.com/questions/134425/how-can-i-chroot-sftp-only-ssh-users-into-their-homes
}
function download() {
local URL=$1
local FILE=
trim FILE "$2"
if [[ -z ${FILE} ]]; then
FILE=${URL##*/}
fi
if [[ -e "${FILE}" ]]; then
rm -f "${FILE}"
fi
wget -O "${FILE}" ${URL}
}
function fetchGitHubRelease() {
local __RESULT=$1
local DEVELOPER=$2
local COMPONENT=$3
local EXTENSION=$4
local URL=$(curl -s https://api.github.com/repos/${DEVELOPER}/${COMPONENT}/releases \
| grep "browser_download_url.*${EXTENSION}" \
| cut -d : -f 2,3 \
| tr -d \" \
| head -n 1)
local FILE=${URL##*/}
download ${URL}
eval $__RESULT=\${FILE}
}
function setCompiler() {
local OS=$1
local CPU=$2
case ${OS} in
gsos)
case ${CPU} in
816)
NAME="gsos-wdc"
ARCH=816
;;
esac
BACKEND=orca
export PATH=${OLD_PATH}:${IIGS}
"${IIGS}/mountORCA.sh"
;;
linux)
case ${CPU} in
i386)
NAME="linux-intel"
ARCH=i386
TRIPLE="x86_64-linux-gnu"
export CFLAGS="-m32"
;;
x86_64)
NAME="linux-intel"
ARCH=x86_64
TRIPLE="${ARCH}-linux-gnu"
export CFLAGS=
;;
esac
BACKEND=SDL2
export PATH=${OLD_PATH}
export LD_LIBRARY_PATH=
export CC=${TRIPLE}-gcc
export AR=${TRIPLE}-ar
;;
macos)
case ${CPU} in
i386)
NAME="macos-intel"
ARCH=i386
TRIPLE="${ARCH}-apple-darwin17"
;;
x86_64)
NAME="macos-intel"
ARCH=x86_64
TRIPLE="${ARCH}-apple-darwin17"
;;
arm)
NAME="macos-apple"
ARCH=aarch64
TRIPLE="${ARCH}-apple-darwin20.4"
;;
esac
BACKEND=SDL2
export CFLAGS=
export PATH=${HOME}/cross/${NAME}/bin:${OLD_PATH}
export LD_LIBRARY_PATH=${HOME}/cross/${NAME}/lib
export CC=${TRIPLE}-clang
export AR=${TRIPLE}-ar
sudo rm -f /usr/lib/llvm-10/lib/clang/10.0.0/lib/darwin && true
sudo ln -s ${HOME}/cross/${NAME}/darwin /usr/lib/llvm-10/lib/clang/10.0.0/lib/.
;;
windows)
case ${CPU} in
i386)
NAME="windows-intel"
ARCH=i686
TRIPLE="${ARCH}-w64-mingw32"
;;
x86_64)
NAME="windows-intel"
ARCH=x86_64
TRIPLE="${ARCH}-w64-mingw32"
;;
esac
BACKEND=SDL2
export PATH=${OLD_PATH}
export LD_LIBRARY_PATH=
export CFLAGS="-static-libgcc"
export CC=${TRIPLE}-gcc
export AR=${TRIPLE}-ar
;;
esac
INSTALLED=${HOME}/installed/${NAME}-${ARCH}
mkdir -p ${INSTALLED}
}
function scriptIsDownloaded() {
local GGUSER=$1
local GGPASS=$2
# updateSystem
# configureSFTP
# buildIIgsSDK "Golden Gate.msi" "Opus ][ The Software.iso" id_rsa id_rsa.pub "${GGUSER}" "${GGPASS}"
# buildMacOSSDK MacOSX10.13.sdk.tar.xz macos-intel
# buildMacOSSDK MacOSX11.3.sdk.tar.xz macos-apple
setCompiler gsos 816
buildJoeyLib
# setCompiler linux i386
# buildSDL2 ${SDL2_NEW}
# buildJoeyLib
# setCompiler linux x86_64
# buildSDL2 ${SDL2_NEW}
# buildJoeyLib
# setCompiler macos i386
# buildSDL2 ${SDL2_OLD}
# buildJoeyLib
# setCompiler macos x86_64
# buildSDL2 ${SDL2_OLD}
# buildJoeyLib
# setCompiler macos arm
# buildSDL2 ${SDL2_NEW}
# buildJoeyLib
# setCompiler windows i386
# buildSDL2 ${SDL2_NEW}
# buildJoeyLib
# setCompiler windows x86_64
# buildSDL2 ${SDL2_NEW}
# buildJoeyLib
}
function trim() {
local __RESULT=$1
local __VAR="${*:2}"
# remove leading whitespace characters
__VAR="${__VAR#"${__VAR%%[![:space:]]*}"}"
# remove trailing whitespace characters
__VAR="${__VAR%"${__VAR##*[![:space:]]}"}"
eval $__RESULT=\${__VAR}
}
function updateSystem() {
sudo apt update
sudo apt -y upgrade
sudo apt -y dist-upgrade
sudo dpkg --add-architecture i386
sudo apt -y install \
autoconf \
build-essential \
bzip2 \
clang \
cmake \
cpio \
gcc-multilib \
gzip \
libbz2-dev \
liblzma-dev \
libssl-dev \
libxml2-dev \
llvm \
mingw-w64 \
patch \
php-cli \
sed \
uuid-dev \
xz-utils \
zlib1g-dev
# ORCA / GoldenGate Stuff
sudo apt -y install \
genisoimage \
jfsutils \
msitools \
ragel
}
scriptIsDownloaded "$1" "$2"