add sourcebuild

This commit is contained in:
Ing 2024-03-16 06:44:38 +08:00
parent 1372fd2e48
commit c03f6142d8
5 changed files with 301 additions and 177 deletions

9
.gitignore vendored
View File

@ -6,5 +6,14 @@ rr*.vmdk
*.bak *.bak
*.o *.o
**.mo **.mo
tests tests
Changelog* Changelog*
files/mnt/p1/.locale
files/mnt/p1/grub_cksum.syno
files/mnt/p1/GRUB_VER
files/mnt/p1/user-config.yml
files/mnt/p2
files/mnt/p3
files/tmp

View File

@ -304,11 +304,16 @@ function productversMenu() {
else else
MSG="$(TEXT "Successfully to get pat data, Please confirm.\nOr modify the URL and md5sum to you need.")" MSG="$(TEXT "Successfully to get pat data, Please confirm.\nOr modify the URL and md5sum to you need.")"
fi fi
DIALOG --title "$(TEXT "Product Version")" \ if [ -z "${1}" ]; then
--extra-button --extra-label "$(TEXT "Retry")" \ DIALOG --title "$(TEXT "Product Version")" \
--form "${MSG}" 10 110 2 "URL" 1 1 "${paturl}" 1 5 100 0 "MD5" 2 1 "${patsum}" 2 5 100 0 \ --extra-button --extra-label "$(TEXT "Retry")" \
2>"${TMP_PATH}/resp" --form "${MSG}" 10 110 2 "URL" 1 1 "${paturl}" 1 5 100 0 "MD5" 2 1 "${patsum}" 2 5 100 0 \
RET=$? 2>"${TMP_PATH}/resp"
RET=$?
else
echo -e "${paturl}\n${patsum}" >"${TMP_PATH}/resp"
RET=0
fi
[ ${RET} -eq 0 ] && break # ok-button [ ${RET} -eq 0 ] && break # ok-button
[ ${RET} -eq 3 ] && continue # extra-button [ ${RET} -eq 3 ] && continue # extra-button
return # 1 or 255 # cancel-button or ESC return # 1 or 255 # cancel-button or ESC
@ -1262,6 +1267,7 @@ function extractDsmFiles() {
############################################################################### ###############################################################################
# Where the magic happens! # Where the magic happens!
# 1 - silent
function make() { function make() {
rm -f "${LOG_FILE}" rm -f "${LOG_FILE}"
while true; do while true; do
@ -1301,8 +1307,10 @@ function make() {
done 2>&1 | DIALOG --title "$(TEXT "Main menu")" \ done 2>&1 | DIALOG --title "$(TEXT "Main menu")" \
--progressbox "$(TEXT "Making ...")" 20 100 --progressbox "$(TEXT "Making ...")" 20 100
if [ -f "${LOG_FILE}" ]; then if [ -f "${LOG_FILE}" ]; then
DIALOG --title "$(TEXT "Error")" \ if [ ! "${1}" = "-1" ]; then
--msgbox "$(cat ${LOG_FILE})" 0 0 DIALOG --title "$(TEXT "Error")" \
--msgbox "$(cat ${LOG_FILE})" 0 0
fi
rm -f "${LOG_FILE}" rm -f "${LOG_FILE}"
return 1 return 1
else else
@ -2962,6 +2970,16 @@ function updateMenu() {
done done
} }
###############################################################################
function cleanCache() {
(
rm -rfv "${PART3_PATH}/dl/"*
rm -rfv "${TMP_PATH}/"*
) 2>&1 | DIALOG --title "$(TEXT "Main menu")" \
--progressbox "$(TEXT "Cleaning cache ...")" 20 100
}
###############################################################################
function notepadMenu() { function notepadMenu() {
[ -d "${USER_UP_PATH}" ] || mkdir -p "${USER_UP_PATH}" [ -d "${USER_UP_PATH}" ] || mkdir -p "${USER_UP_PATH}"
[ -f "${USER_UP_PATH}/notepad" ] || echo "$(TEXT "This person is very lazy and hasn't written anything.")" >"${USER_UP_PATH}/notepad" [ -f "${USER_UP_PATH}/notepad" ] || echo "$(TEXT "This person is very lazy and hasn't written anything.")" >"${USER_UP_PATH}/notepad"
@ -2974,178 +2992,169 @@ function notepadMenu() {
############################################################################### ###############################################################################
############################################################################### ###############################################################################
if [ "${1}" = "update" ]; then if [ $# -ge 1 ]; then
EXT=${2:-"a"} $@
updateMenu "${EXT}" else
exit 0 # Main loop
fi NEXT="m"
if [ "${1}" = "make" -a -n "${MODEL}" -a -n "${PRODUCTVER}" -a loaderIsConfigured ]; then [ -n "$(ls ${TMP_PATH}/pats/*.pat 2>/dev/null)" ] && NEXT="u"
make [ -f "${PART1_PATH}/.build" ] && NEXT="d"
exit [ -n "${MODEL}" ] && NEXT="v"
fi while true; do
if [ "${1}" = "boot" -a -n "${MODEL}" -a -n "${PRODUCTVER}" -a loaderIsConfigured ]; then echo -n "" >"${TMP_PATH}/menu"
make echo "m \"$(TEXT "Choose a model")\"" >>"${TMP_PATH}/menu"
boot && exit 0 || sleep 5 if [ -n "${MODEL}" ]; then
fi echo "n \"$(TEXT "Choose a version")\"" >>"${TMP_PATH}/menu"
# Main loop
NEXT="m"
[ -n "$(ls ${TMP_PATH}/pats/*.pat 2>/dev/null)" ] && NEXT="u"
[ -f "${PART1_PATH}/.build" ] && NEXT="d"
[ -n "${MODEL}" ] && NEXT="v"
while true; do
echo -n "" >"${TMP_PATH}/menu"
echo "m \"$(TEXT "Choose a model")\"" >>"${TMP_PATH}/menu"
if [ -n "${MODEL}" ]; then
echo "n \"$(TEXT "Choose a version")\"" >>"${TMP_PATH}/menu"
fi
echo "u \"$(TEXT "Parse pat")\"" >>"${TMP_PATH}/menu"
if [ -n "${PRODUCTVER}" ]; then
PLATFORM="$(readModelKey "${MODEL}" "platform")"
KVER="$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kver")"
KPRE="$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kpre")"
if [ -f "${CKS_PATH}/bzImage-${PLATFORM}-$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}.gz" ] &&
[ -f "${CKS_PATH}/modules-${PLATFORM}-$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}.tgz" ]; then
echo "s \"$(TEXT "Kernel:") \Z4${KERNEL}\Zn\"" >>"${TMP_PATH}/menu"
fi fi
echo "a \"$(TEXT "Addons menu")\"" >>"${TMP_PATH}/menu" echo "u \"$(TEXT "Parse pat")\"" >>"${TMP_PATH}/menu"
echo "o \"$(TEXT "Modules menu")\"" >>"${TMP_PATH}/menu"
echo "x \"$(TEXT "Cmdline menu")\"" >>"${TMP_PATH}/menu"
echo "i \"$(TEXT "Synoinfo menu")\"" >>"${TMP_PATH}/menu"
fi
echo "v \"$(TEXT "Advanced menu")\"" >>"${TMP_PATH}/menu"
if [ -n "${MODEL}" ]; then
if [ -n "${PRODUCTVER}" ]; then if [ -n "${PRODUCTVER}" ]; then
echo "d \"$(TEXT "Build the loader")\"" >>"${TMP_PATH}/menu" PLATFORM="$(readModelKey "${MODEL}" "platform")"
KVER="$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kver")"
KPRE="$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kpre")"
if [ -f "${CKS_PATH}/bzImage-${PLATFORM}-$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}.gz" ] &&
[ -f "${CKS_PATH}/modules-${PLATFORM}-$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}.tgz" ]; then
echo "s \"$(TEXT "Kernel:") \Z4${KERNEL}\Zn\"" >>"${TMP_PATH}/menu"
fi
echo "a \"$(TEXT "Addons menu")\"" >>"${TMP_PATH}/menu"
echo "o \"$(TEXT "Modules menu")\"" >>"${TMP_PATH}/menu"
echo "x \"$(TEXT "Cmdline menu")\"" >>"${TMP_PATH}/menu"
echo "i \"$(TEXT "Synoinfo menu")\"" >>"${TMP_PATH}/menu"
fi fi
fi echo "v \"$(TEXT "Advanced menu")\"" >>"${TMP_PATH}/menu"
if loaderIsConfigured; then if [ -n "${MODEL}" ]; then
echo "b \"$(TEXT "Boot the loader")\"" >>"${TMP_PATH}/menu" if [ -n "${PRODUCTVER}" ]; then
fi echo "d \"$(TEXT "Build the loader")\"" >>"${TMP_PATH}/menu"
echo "l \"$(TEXT "Choose a language")\"" >>"${TMP_PATH}/menu" fi
echo "k \"$(TEXT "Choose a keymap")\"" >>"${TMP_PATH}/menu" fi
if [ 0$(du -m ${PART3_PATH}/dl 2>/dev/null | awk '{printf $1}') -gt 1 ]; then if loaderIsConfigured; then
echo "c \"$(TEXT "Clean disk cache")\"" >>"${TMP_PATH}/menu" echo "b \"$(TEXT "Boot the loader")\"" >>"${TMP_PATH}/menu"
fi fi
echo "p \"$(TEXT "Update menu")\"" >>"${TMP_PATH}/menu" echo "l \"$(TEXT "Choose a language")\"" >>"${TMP_PATH}/menu"
echo "t \"$(TEXT "Notepad")\"" >>"${TMP_PATH}/menu" echo "k \"$(TEXT "Choose a keymap")\"" >>"${TMP_PATH}/menu"
echo "e \"$(TEXT "Exit")\"" >>"${TMP_PATH}/menu" if [ 0$(du -m ${PART3_PATH}/dl 2>/dev/null | awk '{printf $1}') -gt 1 ]; then
echo "c \"$(TEXT "Clean disk cache")\"" >>"${TMP_PATH}/menu"
fi
echo "p \"$(TEXT "Update menu")\"" >>"${TMP_PATH}/menu"
echo "t \"$(TEXT "Notepad")\"" >>"${TMP_PATH}/menu"
echo "e \"$(TEXT "Exit")\"" >>"${TMP_PATH}/menu"
DIALOG --title "$(TEXT "Main menu")" \
--default-item ${NEXT} --menu "$(TEXT "Choose a option")" 0 0 0 --file "${TMP_PATH}/menu" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && break
case $(<"${TMP_PATH}/resp") in
m)
modelMenu
NEXT="n"
;;
n)
productversMenu
NEXT="d"
;;
u)
ParsePat
NEXT="d"
;;
s)
DIALOG --title "$(TEXT "Main menu")" \ DIALOG --title "$(TEXT "Main menu")" \
--infobox "$(TEXT "Change ...")" 0 0 --default-item ${NEXT} --menu "$(TEXT "Choose a option")" 0 0 0 --file "${TMP_PATH}/menu" \
[ ! "${KERNEL}" = "custom" ] && KERNEL='custom' || KERNEL='official' 2>${TMP_PATH}/resp
writeConfigKey "kernel" "${KERNEL}" "${USER_CONFIG_FILE}" [ $? -ne 0 ] && break
if [ "${ODP}" = "true" ]; then case $(<"${TMP_PATH}/resp") in
ODP="false" m)
writeConfigKey "odp" "${ODP}" "${USER_CONFIG_FILE}" modelMenu
fi NEXT="n"
if [ -n "${PLATFORM}" -a -n "${KVER}" ]; then ;;
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" n)
while read ID DESC; do productversMenu
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}" NEXT="d"
done <<<$(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}") ;;
fi u)
touch ${PART1_PATH}/.build ParsePat
NEXT="d"
;;
s)
DIALOG --title "$(TEXT "Main menu")" \
--infobox "$(TEXT "Change ...")" 0 0
[ ! "${KERNEL}" = "custom" ] && KERNEL='custom' || KERNEL='official'
writeConfigKey "kernel" "${KERNEL}" "${USER_CONFIG_FILE}"
if [ "${ODP}" = "true" ]; then
ODP="false"
writeConfigKey "odp" "${ODP}" "${USER_CONFIG_FILE}"
fi
if [ -n "${PLATFORM}" -a -n "${KVER}" ]; then
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
while read ID DESC; do
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}"
done <<<$(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}")
fi
touch ${PART1_PATH}/.build
NEXT="o" NEXT="o"
;; ;;
a) a)
addonMenu addonMenu
NEXT="d" NEXT="d"
;; ;;
o) o)
moduleMenu moduleMenu
NEXT="d" NEXT="d"
;; ;;
x) x)
cmdlineMenu cmdlineMenu
NEXT="d" NEXT="d"
;; ;;
i) i)
synoinfoMenu synoinfoMenu
NEXT="d" NEXT="d"
;; ;;
v) v)
advancedMenu advancedMenu
NEXT="d" NEXT="d"
;; ;;
d) d)
make make
NEXT="b" NEXT="b"
;; ;;
b) b)
boot && exit 0 || sleep 5 boot && exit 0 || sleep 5
;; ;;
l) l)
languageMenu languageMenu
NEXT="m" NEXT="m"
;; ;;
k) k)
keymapMenu keymapMenu
NEXT="m" NEXT="m"
;; ;;
c) c)
DIALOG \
--prgbox "rm -rfv \"${PART3_PATH}/dl/\"*" 0 0
NEXT="d"
;;
p)
updateMenu
NEXT="d"
;;
t)
notepadMenu
NEXT="d"
;;
e)
NEXT="e"
while true; do
DIALOG \ DIALOG \
--default-item ${NEXT} --menu "$(TEXT "Choose a action")" 0 0 0 \ --prgbox "rm -rfv \"${PART3_PATH}/dl/\"*" 0 0
p "$(TEXT "Poweroff")" \ NEXT="d"
r "$(TEXT "Reboot")" \ ;;
c "$(TEXT "Reboot to RR")" \ p)
s "$(TEXT "Back to shell")" \ updateMenu
e "$(TEXT "Exit")" \ NEXT="d"
2>${TMP_PATH}/resp ;;
[ $? -ne 0 ] && break t)
case "$(<${TMP_PATH}/resp)" in notepadMenu
p) NEXT="d"
poweroff ;;
;; e)
r) NEXT="e"
reboot while true; do
;; DIALOG \
c) --default-item ${NEXT} --menu "$(TEXT "Choose a action")" 0 0 0 \
rebootTo config p "$(TEXT "Poweroff")" \
;; r "$(TEXT "Reboot")" \
s) c "$(TEXT "Reboot to RR")" \
break 2 s "$(TEXT "Back to shell")" \
;; e "$(TEXT "Exit")" \
e) 2>${TMP_PATH}/resp
break [ $? -ne 0 ] && break
;; case "$(<${TMP_PATH}/resp)" in
esac p)
done poweroff
;; ;;
esac r)
done reboot
clear ;;
echo -e "$(TEXT "Call \033[1;32mmenu.sh\033[0m to return to menu")" c)
rebootTo config
;;
s)
break 2
;;
e)
break
;;
esac
done
;;
esac
done
clear
echo -e "$(TEXT "Call \033[1;32mmenu.sh\033[0m to return to menu")"
fi

0
localbuild.sh Normal file → Executable file
View File

View File

@ -6,7 +6,7 @@
# See /LICENSE for more information. # See /LICENSE for more information.
# #
export TOKEN="${1}" [ -n "${1}" ] && export TOKEN="${1}"
# Convert po2mo # Convert po2mo
# $1 path # $1 path

106
sourcebuild.sh Executable file
View File

@ -0,0 +1,106 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# sudo apt update
# sudo apt install -y locales busybox dialog
# sudo locale-gen en_US.UTF-8 ko_KR.UTF-8 ru_RU.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_TW.UTF-8
#
# export TOKEN="${1}"
#
set -e
PRE="true"
. scripts/func.sh
echo "Get extractor"
getCKs "files/p3/cks" "${PRE}"
getLKMs "files/p3/lkms" "${PRE}"
getAddons "files/p3/addons" "${PRE}"
getModules "files/p3/modules" "${PRE}"
getBuildroot "files/p3" "${PRE}"
getExtractor "files/p3/extractor"
echo "Repack initrd"
convertpo2mo "files/initrd/opt/rr/lang"
repackInitrd "files/p3/initrd-rr" "files/initrd"
if [ -n "${1}" ]; then
if echo "$(cd "files/initrd/opt/rr/model-configs" 2>/dev/null; ls *.yml 2>/dev/null | cut -d'.' -f1)" | grep -q "${1}"; then
echo "Model found: ${1}"
export LOADER_DISK="LOCALBUILD"
export CHROOT_PATH="$(realpath files)"
(
cd "${CHROOT_PATH}/initrd/opt/rr"
# sed -i 's/rd-compressed:.*$/rd-compressed: true/g' "model-configs/${1}.yml"
./init.sh
./menu.sh modelMenu "${1}"
./menu.sh productversMenu "7.2"
./menu.sh make -1
./menu.sh cleanCache
)
else
echo "Model not found: ${1}"
exit 1
fi
fi
IMAGE_FILE="rr.img"
gzip -dc "files/grub.img.gz" >"${IMAGE_FILE}"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
echo "Mounting image file"
sudo rm -rf "/tmp/mnt/p1"
sudo rm -rf "/tmp/mnt/p2"
sudo rm -rf "/tmp/mnt/p3"
sudo mkdir -p "/tmp/mnt/p1"
sudo mkdir -p "/tmp/mnt/p2"
sudo mkdir -p "/tmp/mnt/p3"
sudo mount ${LOOPX}p1 "/tmp/mnt/p1"
sudo mount ${LOOPX}p2 "/tmp/mnt/p2"
sudo mount ${LOOPX}p3 "/tmp/mnt/p3"
echo "Copying files"
sudo cp -Rf "files/mnt/p1/"* "/tmp/mnt/p1"
sudo cp -Rf "files/mnt/p2/"* "/tmp/mnt/p2"
sudo cp -Rf "files/mnt/p3/"* "/tmp/mnt/p3"
sync
# update.zip
sha256sum update-list.yml update-check.sh >sha256sum
zip -9j update.zip update-list.yml update-check.sh
while read F; do
if [ -d "/tmp/${F}" ]; then
FTGZ="$(basename "/tmp/${F}").tgz"
tar -czf "${FTGZ}" -C "/tmp/${F}" .
sha256sum "${FTGZ}" >>sha256sum
zip -9j update.zip "${FTGZ}"
sudo rm -f "${FTGZ}"
else
(cd $(dirname "/tmp/${F}") && sha256sum $(basename "/tmp/${F}")) >>sha256sum
zip -9j update.zip "/tmp/${F}"
fi
done <<<$(yq '.replace | explode(.) | to_entries | map([.key])[] | .[]' update-list.yml)
zip -9j update.zip sha256sum
echo "Unmount image file"
sudo umount "/tmp/files/p1"
sudo umount "/tmp/files/p2"
sudo umount "/tmp/files/p3"
sudo losetup --detach ${LOOPX}
if [ -n "${1}" ]; then
echo "Packing image file"
sudo mv "${IMAGE_FILE}" "rr-${1}.img"
fi