Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/hakchi2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormadmonkey <madfkingmonkey@gmail.com>2017-10-08 15:27:58 +0300
committermadmonkey <madfkingmonkey@gmail.com>2017-10-08 15:27:58 +0300
commitf476e186a1b502d6d72fdf7dab4ab44e5b209230 (patch)
treea9ffa9521ae2ce8881d02145d8120103e38d2af1 /mods/mod_hakchi/hakchi/rootfs/etc/preinit.d
parentafb1d8a8b5fde2e4d49ad9c42e29d64f65074718 (diff)
update scripts
Diffstat (limited to 'mods/mod_hakchi/hakchi/rootfs/etc/preinit.d')
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines16
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions150
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup60
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package109
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config2
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit2
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware4
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods28
-rw-r--r--mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games6
9 files changed, 335 insertions, 42 deletions
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines
index 47c72734..3aeee77c 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0000_defines
@@ -1,12 +1,15 @@
-set_gamepath(){
+setGamepath(){
+ sftype="nes"
+ sfregion="usa"
+ [ "$(cat "$mountpoint/etc/clover/boardtype")" == "dp-shvc" ] && sftype="snes"
+ [ "$(cat "$mountpoint/etc/clover/REGION")" == "JPN" ] && sfregion="jpn"
+
local feck="$mountpoint/var/lib/clover/profiles/0/home-menu/save/system-save.json"
- if [ -f "$mountpoint/etc/clover/version/canoe" ]; then
-# echo "SNES gamepath"
+ if [ "$sftype" == "snes" ]; then
gamepath="/usr/share/games"
[ -f "$feck" ] && mv -f "$feck" "$feck.nes"
[ -d "$feck.snes" ] && rm -rf "$feck" && mv "$feck.snes" "$feck"
else
-# echo "NES gamepath"
gamepath="/usr/share/games/nes/kachikachi"
[ -d "$feck" ] && rm -rf "$feck.snes" && mv "$feck" "$feck.snes"
[ -f "$feck.nes" ] && mv -f "$feck.nes" "$feck"
@@ -19,9 +22,12 @@ modpath="/$modname"
installpath="$mountpoint/var/lib/$modname"
firmwarepath="$installpath/firmware"
rootfs="$installpath/rootfs"
+squashfs="$installpath/squashfs"
preinit="$rootfs/etc/preinit"
preinitpath="$preinit.d"
+sftype=""
+sfregion=""
gamepath=""
-set_gamepath
temppath="/tmp"
+setGamepath
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions
index 2689c24e..02febfa3 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0010_functions
@@ -1,11 +1,30 @@
+squashDevice(){
+ echo "$(mount | grep -F squashfs | head -n1 | awk '{print $1;}')"
+}
+
+umountSquash(){
+ mountpoint -q "$squashfs" && umount "$squashfs"
+}
+
+mountSquash(){
+ [ -d "$(dirname "$squashfs")" ] || return 1
+ umountSquash
+ mkdir -p "$squashfs"
+ local sdev="$(squashDevice)"
+ [ -z "$sdev" ] && return 1
+ mount -o ro,noatime "$sdev" "$squashfs"
+}
+
mount_base(){
mount -t tmpfs -o mode=0755,nosuid,nodev tmpfs "$mountpoint/var"
mkdir -p "$mountpoint/var/lib"
mount -o defaults,nosuid,nodev,noatime /dev/nandc "$mountpoint/var/lib"
+ mountSquash
}
umount_base(){
sync
+ umountSquash
umount "$mountpoint/var/lib"
umount "$mountpoint/var"
}
@@ -20,7 +39,7 @@ remove_old(){
mod_repair_etc(){
remove_old "$rootfs"
rm -f "$modpath/rootfs/etc/preinit.d/p0000_config"
- chown -R 0:0 $modpath/
+ chown -R 0:0 "$modpath/"
local etc="$temppath/etc"
rm -rf "$etc"
@@ -39,38 +58,63 @@ mod_repair_modules(){
}
remount_root(){
- [ -z "$(mount | grep -F loop)" ] || return 1
-
- local tmpmount=$modpath/var.tmp
+ local tmpmount="/var"
mkdir -p "$tmpmount"
mount --move "$mountpoint/var" "$tmpmount"
umount "$mountpoint"
- local loopfile=$tmpmount${1##$mountpoint/var}
- mount -o loop,ro "$loopfile" "$mountpoint" || shutdown
+ local loopfile="$tmpmount${1##$mountpoint/var}"
+ mount -o loop,ro,noatime "$loopfile" "$mountpoint" || shutdown
mount --move "$tmpmount" "$mountpoint/var"
}
+checkFirmware(){
+ [ -f "$1" ] || return 1
+ [ "$(hexdump -e '1/4 "%u"' -s 0 -n 4 "$1")" == "1936814952" ] || return 1
+ return 0
+}
+
+currentFirmware(){
+ local firmware="$(losetup | awk '{print $3'})"
+ if ! [ -z "$firmware" ]; then
+ echo "$firmware"
+ return 0
+ fi
+ if [ -b /dev/mapper/root-crypt ]; then
+ echo "_nand_"
+ return 0
+ fi
+ return 1
+}
+
load_firmware(){
- [ -d "$firmwarepath" ] || return 0
- local firmware=$(find "$firmwarepath" -type f -name "*.hsqs" | sort | head -n 1)
- [ -f "$firmware" ] || return 0
+ [ -z "$(mount | grep -F loop0)" ] || return 1
+
+ local firmware="$mountpoint$cfg_firmware"
+ if ! checkFirmware "$firmware"; then
+ [ -d "$firmwarepath" ] || return 0
+ firmware="$(find "$firmwarepath" -type f -name "*.hsqs" | sort | head -n 1)"
+ fi
+ checkFirmware "$firmware" || return 0
+
mod_repair_modules
- remount_root "$firmware" || return 0
+ umountSquash
+ remount_root "$firmware"
cryptsetup close root-crypt
- mod_repair_etc
- if [ -d "$rootfs/lib/modules/$(uname -r)" ]; then
- overmount "/lib/modules"
- else
- echo "no modules for loaded kernel $(uname -r)"
+ mountSquash
+ if [ ! -d "$mountpoint/lib/modules/$(uname -r)" ]; then
+ if [ -d "$rootfs/lib/modules/$(uname -r)" ]; then
+ overmount "/lib/modules"
+ else
+ echo "no modules for loaded kernel $(uname -r)"
+ fi
fi
- set_gamepath
}
shutdown(){
- echo shutting down...
+ echo "shutting down..."
echo
sync
umount -a -r 2>/dev/null
@@ -78,6 +122,15 @@ shutdown(){
while :;do sleep 1;:;done
}
+reboot(){
+ echo "rebooting..."
+ echo
+ sync
+ umount -a -r 2>/dev/null
+ /bin/reboot -f
+ while :;do sleep 1;:;done
+}
+
early_getty(){
cd "$modpath/transfer"
getty -ni 115200 ttyS0 -l /bin/sh
@@ -86,20 +139,24 @@ early_getty(){
copy(){
# we must create target directory
- local dirname=$(dirname "$2")
+ local dirname="$(dirname "$2")"
mkdir -p "$dirname"
rsync -ac "$1" "$2"
}
copy_mask(){
# this function is unsafe, avoid spaces in filenames!
- local dirname=$(dirname "$2")
+ local dirname="$(dirname "$2")"
mkdir -p "$dirname"
rsync -ac $1 "$2"
}
restore(){
- copy "$mountpoint$1" "$rootfs$1"
+ if mountpoint -q "$squashfs" && [ -e "$squashfs$1" ]; then
+ copy "$squashfs$1" "$rootfs$1"
+ else
+ copy "$mountpoint$1" "$rootfs$1"
+ fi
}
mount_bind(){
@@ -111,25 +168,60 @@ mount_bind(){
overmount(){
if [ "$#" == "1" ]; then
- echo overmounting $1
+ echo "overmounting $1"
mount_bind "$rootfs$1" "$mountpoint$1" && return 0
fi
if [ "$#" == "2" ]; then
- echo overmounting $1 on $2
+ echo "overmounting $1 on $2"
mount_bind "$rootfs$1" "$mountpoint$2" && return 0
fi
- echo overmounting failed
+ echo "overmounting failed"
+ return 1
+}
+
+containsGames(){
+ [ -d "$1" ] || return 1
+ [ -z "$(cd "$1";ls CLV-* 2>/dev/null)" ] && return 1
+ return 0
}
overmount_games(){
- local menu_code=000
- [ -f "$installpath/menu" ] && menu_code=$(cat "$installpath/menu")
- [ -z "$menu_code" ] && menu_code=000
- echo menu code: $menu_code
+ local menu_code="000"
+ [ -f "$installpath/menu" ] && menu_code="$(cat "$installpath/menu")"
+ [ -z "$menu_code" ] && menu_code="000"
+ echo "menu code: $menu_code"
if [ "$menu_code" != "000" ]; then
- if [ -d "$rootfs$gamepath/$menu_code" ]; then
+ if containsGames "$rootfs$gamepath/$menu_code"; then
overmount "$gamepath/$menu_code" "$gamepath" && return 0
+ else
+ echo "no romz found at: $rootfs$gamepath/$menu_code"
fi
fi
- overmount "$gamepath"
+ if containsGames "$rootfs$gamepath"; then
+ overmount "$gamepath" && return 0
+ fi
+ echo "no romz found at: $rootfs$gamepath"
+ return 1
+}
+
+uistop(){
+ killall -9 clover-mcp
+ killall -9 ReedPlayer-Clover
+ killall kachikachi
+ killall canoe-shvc
+ killall retroarch
+}
+
+uistart(){
+ uistop 1>/dev/null 2>&1
+ /etc/init.d/S81clover-mcp start
+}
+
+gameover(){
+ poweroff
+}
+
+printSoftwareInfo(){
+ echo "software=$sftype"
+ echo "region=$sfregion"
}
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup
new file mode 100644
index 00000000..8377e1d7
--- /dev/null
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0020_backup
@@ -0,0 +1,60 @@
+backup_one(){
+ [ ! -f "$backuppath/$1.gz" ] || return 0
+ echo "backup $1"
+ dd "if=/dev/$1" bs=128K | gzip > "$backuppath/$1.gz"
+}
+
+backup_nandb(){
+ [ -b /dev/mapper/root-crypt ] || return 1
+ mkdir -p "$backuppath" || return 1
+ cd "$mountpoint/etc/clover" || return 1
+ local nandb_filename="$(cat boardtype)-$(cat VERSION)-$(cat REGION).hsqs"
+ nandb_filename="$(echo "$nandb_filename" | tr '[:upper:]' '[:lower:]')"
+ cd "$backuppath" || return 1
+ if [ ! -f "$nandb_filename" ]; then
+ echo "backup $nandb_filename"
+ dd if=/dev/mapper/root-crypt bs=4k \
+ count=$((($(hexdump -e '1/4 "%u"' -s $((0x28)) -n 4 /dev/mapper/root-crypt)+0xfff)/0x1000)) \
+ > "$nandb_filename" && \
+ md5sum "$nandb_filename" > "$nandb_filename.md5"
+ fi
+}
+
+backup_nandc(){
+ [ "$cf_backup_nandc" == "y" ] || return 0
+ local backuppath="$installpath/backup"
+ [ ! -f "$backuppath/nandc.gz" ] || return 0
+ backuppath="$modpath"
+ backup_one nandc
+}
+
+backup(){
+ local backuppath="$installpath/backup"
+ if [ -f "$modpath/nandc.gz" ]; then
+ echo "move nandc"
+ mkdir -p "$backuppath"
+ mv "$modpath/nandc.gz" "$backuppath/"
+ fi
+ [ "$cf_backup" == "y" ] || return 0
+ backup_nandb
+ cd /
+ [ "$cf_backup_dummy" == "y" ] || return 0
+ backup_one nanda
+ backup_one nandd
+ backup_one nande
+}
+
+dumpFirmware(){
+ if [ -z "$1" ]; then
+ echo "specify path"
+ return 1
+ fi
+ local backuppath="$1"
+ if backup_nandb; then
+ cd /
+ return 0
+ fi
+ echo "whoopsie"
+ cd /
+ return 1
+}
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package
new file mode 100644
index 00000000..3c3894f3
--- /dev/null
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/b0030_package
@@ -0,0 +1,109 @@
+transfer_file(){
+ [ -f "$1" ] || return 0
+ dos2unix -u "$1"
+ source "$1"
+ local res=$?
+ rm -f "$1"
+ return $res
+}
+
+transfer_default(){
+ rsync -ac \
+ --exclude "/install" \
+ --exclude "/transfer" \
+ --exclude "/uninstall" \
+ --exclude "*.hmod" \
+ "$transferpath/" "$rootfs/"
+}
+
+transfer_path(){
+ local transferpath="$1"
+ chown -R 0:0 "$transferpath/"
+ find "$transferpath/" -maxdepth 1 -type f -iname "readme.*" -delete
+ find "$transferpath/" -maxdepth 1 -type f -iname "*.txt" -delete
+ find "$transferpath/" -maxdepth 1 -type f -iname "*.md" -delete
+ local docopy=y
+ cd "$transferpath"
+ [ -d "./bin" ] && chmod 755 ./bin/*
+ [ -d "./etc/init.d" ] && chmod 755 ./etc/init.d/*
+ transfer_file "$transferpath/install" || docopy=n
+ cd "$transferpath"
+ transfer_file "$transferpath/transfer" || docopy=n
+ [ "$docopy" == "y" ] && transfer_default
+}
+
+pack_upath(){
+ echo "$installpath/hmod/uninstall-$(basename "$1" .hmod)"
+}
+
+pack_install(){
+ echo "installing $(basename "$1" .hmod)..."
+ if [ -f "$1" ]; then
+ local transferpath="$temppath/pack"
+ rm -rf "$transferpath"
+ mkdir -p "$transferpath"
+ cd "$transferpath" && tar -xzf "$1"
+ else
+ local transferpath="$1"
+ fi
+ transfer_path "$transferpath"
+ echo "creating uninstall for $(basename "$1" .hmod)..."
+ echo >> "$transferpath/uninstall"
+ echo "# auto-generated" >> "$transferpath/uninstall"
+ cd "$transferpath"
+ find . -type l -exec echo rm -f \"\$rootfs/{}\" + >> "$transferpath/uninstall"
+ find . -type f -exec echo rm -f \"\$rootfs/{}\" + >> "$transferpath/uninstall"
+ find . -depth -mindepth 1 -type d -exec echo rmdir \"\$rootfs/{}\" + >> "$transferpath/uninstall"
+ [ $(stat -c%s "$transferpath/uninstall") -gt 8 ] || rm -f "$transferpath/uninstall"
+ cd /
+ local unfile="$(pack_upath "$1")"
+ if [ -f "$transferpath/uninstall" ]; then
+ dos2unix -u "$transferpath/uninstall"
+ sed -i "s#rmdir #rmdir --ignore-fail-on-non-empty #" "$transferpath/uninstall"
+ mkdir -p "$installpath/hmod"
+ copy "$transferpath/uninstall" "$unfile"
+ else
+ rm -f "$unfile"
+ fi
+ echo "package $(basename "$1" .hmod) installed"
+}
+
+pack_list(){
+ if [ -d "$installpath/hmod" ]; then
+ for i in $(find "$installpath/hmod/" -maxdepth 1 -type f -name "uninstall-*" | sort); do
+ echo "${i##$installpath/hmod/uninstall-}"
+ done
+ fi
+}
+
+pack_uninstall(){
+ if [ "$1" == "all" ]; then
+ for i in $(pack_list); do
+ pack_uninstall "$i"
+ done
+ else
+ local unfile="$(pack_upath "$1")"
+ if [ -f "$unfile" ]; then
+ echo "uninstalling $(basename "$1" .hmod)..."
+ cd "$rootfs"
+ transfer_file "$unfile"
+ echo "package $(basename "$1" .hmod) uninstalled"
+ fi
+ fi
+ cd /
+ rmdir --ignore-fail-on-non-empty "$installpath/hmod"
+}
+
+packs_install(){
+ [ -d "$1" ] || return 1
+ for i in $(find "$1" -maxdepth 1 -name "*.hmod" | sort); do
+ pack_install "$i"
+ rm -rf "$i"
+ done
+}
+
+packs_uninstall(){
+ for i in $@; do
+ pack_uninstall "$i"
+ done
+}
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
index 68e938f6..2130e4ea 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p0000_config
@@ -1,4 +1,4 @@
-cfg_boot_stock_firmware='n'
cfg_boot_stock='n'
cfg_disable_armet='y'
+cfg_firmware='auto'
cfg_nes_extra_args='--ppu-palette 2'
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit
index 6fb17938..18d36b22 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7000_preinit
@@ -5,5 +5,5 @@ if [ "$cfg_boot_stock" == "y" ]; then
umount_base 2>/dev/null
return 0
else
- echo loading $modname
+ echo "loading $modname"
fi
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware
index 43d756fd..28d28566 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7070_firmware
@@ -1 +1,3 @@
-[ "$cfg_boot_stock_firmware" == "y" ] || load_firmware
+[ "$cfg_firmware" == "_nand_" ] || load_firmware
+mod_repair_etc
+setGamepath
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods
new file mode 100644
index 00000000..ca3b93df
--- /dev/null
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/p7080_hmods
@@ -0,0 +1,28 @@
+local transferpath="$installpath/transfer"
+if [ -d "$transferpath" ]; then
+ cd "$transferpath"
+ [ -f "$transferpath/earlybird" ] && source "$transferpath/earlybird"
+ rm -f "$transferpath/earlybird"
+
+ [ -f "$transferpath/uninstall" ] && packs_uninstall $(cat "$transferpath/uninstall")
+ rm -f "$transferpath/uninstall"
+
+ [ -f "$transferpath/hmod/uninstall" ] && packs_uninstall $(cat "$transferpath/hmod/uninstall")
+ rm -f "$transferpath/hmod/uninstall"
+
+ packs_install "$transferpath"
+
+ if [ -d "$transferpath/hmod" ]; then
+ packs_install "$transferpath/hmod"
+ rm -rf "$transferpath/hmod"
+ fi
+
+ echo "transferring data..."
+ transfer_path "$transferpath"
+ echo
+ cd /
+ rm -rf "$transferpath"
+ save_config
+ reboot
+fi
+unset transferpath
diff --git a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games
index 73cf7716..d0df2442 100644
--- a/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games
+++ b/mods/mod_hakchi/hakchi/rootfs/etc/preinit.d/pa100_games
@@ -1,5 +1 @@
-if [ -z "$(ls $rootfs$gamepath/CLV-* 2>/dev/null)" ]; then
- echo "no romz found"
-else
- overmount_games
-fi
+overmount_games