From e2fe272960c122ab4648026be128ba4c6cdcd5d5 Mon Sep 17 00:00:00 2001 From: weishanshan1084 Date: Mon, 29 Apr 2024 14:41:18 +0800 Subject: [PATCH] add ubuntu and debian build scripts Signed-off-by: weishanshan1084 --- .../common/busybox_initrd_overlay/etc/inittab | 41 ++++ .../common/busybox_initrd_overlay/init | 163 +++++++++++++ .../busybox_initrd_overlay/init.d/01-udev | 50 ++++ .../busybox_initrd_overlay/init.d/90-rootfs | 66 ++++++ .../busybox_initrd_overlay/init.d/99-finish | 28 +++ .../common/debian-archive-bullseye-stable.gpg | Bin 0 -> 2453 bytes board/phytium/common/debian-package-installer | 116 ++++++++++ .../common/linux-4.19/scripts/basic/fixdep | Bin 0 -> 14688 bytes .../linux-4.19/scripts/genksyms/genksyms | Bin 0 -> 62272 bytes .../common/linux-4.19/scripts/mod/modpost | Bin 0 -> 85992 bytes .../common/linux-5.10/scripts/basic/fixdep | Bin 0 -> 14408 bytes .../common/linux-5.10/scripts/mod/modpost | Bin 0 -> 89856 bytes board/phytium/common/post-build.sh | 124 ++++++++++ .../common/post-custom-skeleton-debian-11.sh | 207 +++++++++++++++++ .../common/post-custom-skeleton-ubuntu.sh | 217 ++++++++++++++++++ .../common/ubuntu-additional_packages_list | 11 + board/phytium/common/ubuntu-package-installer | 136 +++++++++++ 17 files changed, 1159 insertions(+) create mode 100644 board/phytium/common/busybox_initrd_overlay/etc/inittab create mode 100755 board/phytium/common/busybox_initrd_overlay/init create mode 100755 board/phytium/common/busybox_initrd_overlay/init.d/01-udev create mode 100755 board/phytium/common/busybox_initrd_overlay/init.d/90-rootfs create mode 100755 board/phytium/common/busybox_initrd_overlay/init.d/99-finish create mode 100644 board/phytium/common/debian-archive-bullseye-stable.gpg create mode 100755 board/phytium/common/debian-package-installer create mode 100755 board/phytium/common/linux-4.19/scripts/basic/fixdep create mode 100755 board/phytium/common/linux-4.19/scripts/genksyms/genksyms create mode 100755 board/phytium/common/linux-4.19/scripts/mod/modpost create mode 100755 board/phytium/common/linux-5.10/scripts/basic/fixdep create mode 100755 board/phytium/common/linux-5.10/scripts/mod/modpost create mode 100755 board/phytium/common/post-build.sh create mode 100755 board/phytium/common/post-custom-skeleton-debian-11.sh create mode 100755 board/phytium/common/post-custom-skeleton-ubuntu.sh create mode 100644 board/phytium/common/ubuntu-additional_packages_list create mode 100755 board/phytium/common/ubuntu-package-installer diff --git a/board/phytium/common/busybox_initrd_overlay/etc/inittab b/board/phytium/common/busybox_initrd_overlay/etc/inittab new file mode 100644 index 00000000..431ce8e9 --- /dev/null +++ b/board/phytium/common/busybox_initrd_overlay/etc/inittab @@ -0,0 +1,41 @@ +# /etc/inittab +# +# Copyright (C) 2001 Erik Andersen +# +# Note: BusyBox init doesn't support runlevels. The runlevels field is +# completely ignored by BusyBox init. If you want runlevels, use +# sysvinit. +# +# Format for each entry: ::: +# +# id == tty to run on, or empty for /dev/console +# runlevels == ignored +# action == one of sysinit, respawn, askfirst, wait, and once +# process == program to run + +# Startup the system +::sysinit:/bin/mount -o remount,rw / +::sysinit:/bin/mkdir -p /dev/pts /dev/shm +::sysinit:/bin/mount -a +::sysinit:/sbin/swapon -a +null::sysinit:/bin/ln -sf /proc/self/fd /dev/fd +null::sysinit:/bin/ln -sf /proc/self/fd/0 /dev/stdin +null::sysinit:/bin/ln -sf /proc/self/fd/1 /dev/stdout +null::sysinit:/bin/ln -sf /proc/self/fd/2 /dev/stderr +::sysinit:/bin/hostname -F /etc/hostname +# now run any rc scripts +::sysinit:/etc/init.d/rcS + +# Put a getty on the serial port +#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL +ttyAMA0::respawn:/sbin/getty -L ttyAMA0 115200 vt100 +ttyAMA1::respawn:/sbin/getty -L ttyAMA1 115200 vt100 +tty1::respawn:/sbin/getty 38400 tty1 + +# Stuff to do for the 3-finger salute +#::ctrlaltdel:/sbin/reboot + +# Stuff to do before rebooting +::shutdown:/etc/init.d/rcK +::shutdown:/sbin/swapoff -a +::shutdown:/bin/umount -a -r diff --git a/board/phytium/common/busybox_initrd_overlay/init b/board/phytium/common/busybox_initrd_overlay/init new file mode 100755 index 00000000..62977750 --- /dev/null +++ b/board/phytium/common/busybox_initrd_overlay/init @@ -0,0 +1,163 @@ +#!/bin/sh +# Copyright (C) 2011 O.S. Systems Software LTDA. +# Licensed on MIT +# +# Provides the API to be used by the initramfs modules +# +# Modules need to provide the following functions: +# +# _enabled : check if the module ought to run (return 1 to skip) +# _run : do what is need +# +# Boot parameters are available on environment in the as: +# +# 'foo=value' as 'bootparam_foo=value' +# 'foo' as 'bootparam_foo=true' +# 'foo.bar[=value] as 'foo_bar=[value|true]' + +# Register a function to be called before running a module +# The hook is called as: +# pre +add_module_pre_hook() { + MODULE_PRE_HOOKS="$MODULE_PRE_HOOKS $1" +} + +# Register a function to be called after running a module +# The hook is called as: +# post +add_module_post_hook() { + MODULE_POST_HOOKS="$MODULE_POST_HOOKS $1" +} + +# Load kernel module +load_kernel_module() { + if modprobe $1 >/dev/null 2>&1; then + info "Loaded module $1" + else + debug "Failed to load module $1" + fi +} + +# Prints information +msg() { + echo "$@" >/dev/console +} + +# Prints information if verbose bootparam is used +info() { + [ -n "$bootparam_verbose" ] && echo "$@" >/dev/console +} + +# Prints information if debug bootparam is used +debug() { + [ -n "$bootparam_debug" ] && echo "DEBUG: $@" >/dev/console +} + +# Prints a message and start a endless loop +fatal() { + echo $1 >/dev/console + echo >/dev/console + + if [ -n "$bootparam_init_fatal_sh" ]; then + sh + else + while [ "true" ]; do + sleep 3600 + done + fi +} + +# Variables shared amoung modules +ROOTFS_DIR="/rootfs" # where to do the switch root +MODULE_PRE_HOOKS="" # functions to call before running each module +MODULE_POST_HOOKS="" # functions to call after running each module +MODULES_DIR=/init.d # place to look for modules +EFI_DIR=/sys/firmware/efi # place to store device firmware information + +# make mount stop complaining about missing /etc/fstab +touch /etc/fstab + +# initialize /proc, /sys, /run/lock and /var/lock +mkdir -p /proc /sys /run/lock /var/lock +mount -t proc proc /proc +mount -t sysfs sysfs /sys + +if [ -d $EFI_DIR ];then + mount -t efivarfs none /sys/firmware/efi/efivars +fi + +# populate bootparam environment +for p in `cat /proc/cmdline`; do + if [ -n "$quoted" ]; then + value="$value $p" + if [ "`echo $p | sed -e 's/\"$//'`" != "$p" ]; then + eval "bootparam_${quoted}=${value}" + unset quoted + fi + continue + fi + + opt=`echo $p | cut -d'=' -f1` + opt=`echo $opt | sed -e 'y/.-/__/'` + if [ "`echo $p | cut -d'=' -f1`" = "$p" ]; then + eval "bootparam_${opt}=true" + else + value="`echo $p | cut -d'=' -f2-`" + if [ "`echo $value | sed -e 's/^\"//'`" != "$value" ]; then + quoted=${opt} + continue + fi + eval "bootparam_${opt}=\"${value}\"" + fi +done + +# use /dev with devtmpfs +if grep -q devtmpfs /proc/filesystems; then + mkdir -p /dev + mount -t devtmpfs devtmpfs /dev +else + if [ ! -d /dev ]; then + fatal "ERROR: /dev doesn't exist and kernel doesn't has devtmpfs enabled." + fi +fi + +mkdir $ROOTFS_DIR + +# Load and run modules +for m in $MODULES_DIR/*; do + # Skip backup files + if [ "`echo $m | sed -e 's/\~$//'`" != "$m" ]; then + continue + fi + + module=`basename $m | cut -d'-' -f 2` + debug "Loading module $module" + + # pre hooks + for h in $MODULE_PRE_HOOKS; do + debug "Calling module hook (pre): $h" + eval "$h pre $module" + debug "Finished module hook (pre): $h" + done + + # process module + . $m + + if ! eval "${module}_enabled"; then + debug "Skipping module $module" + continue + fi + + debug "Running ${module}_run" + eval "${module}_run" + + # post hooks + for h in $MODULE_POST_HOOKS; do + debug "Calling module hook (post): $h" + eval "$h post $module" + debug "Finished module hook (post): $h" + done +done + +# Catch all +fatal "ERROR: Initramfs failed to initialize the system." diff --git a/board/phytium/common/busybox_initrd_overlay/init.d/01-udev b/board/phytium/common/busybox_initrd_overlay/init.d/01-udev new file mode 100755 index 00000000..4898b892 --- /dev/null +++ b/board/phytium/common/busybox_initrd_overlay/init.d/01-udev @@ -0,0 +1,50 @@ +#!/bin/sh +# Copyright (C) 2011, 2012 O.S. Systems Software LTDA. +# Licensed on MIT + +udev_shutdown_hook_handler() { + status=$1 + module=$2 + if [ "$status" = "pre" ] && [ "$module" = "finish" ]; then + udevadm settle + killall `basename $_UDEV_DAEMON` 2>/dev/null + fi +} + +udev_daemon() { + OPTIONS="/sbin/udev/udevd /sbin/udevd /lib/udev/udevd /lib/systemd/systemd-udevd" + + for o in $OPTIONS; do + if [ -x "$o" ]; then + echo $o + return 0 + fi + done + + return 1 +} + +_UDEV_DAEMON=`udev_daemon` + +udev_enabled() { + if [ -z "$_UDEV_DAEMON" ]; then + msg "WARNING: Cannot find the udev daemon; daemon will not be started in initramfs." + return 1 + fi + + return 0 +} + +udev_run() { + add_module_pre_hook "udev_shutdown_hook_handler" + + mkdir -p /run + mkdir -p /var/run + + # Workaround if console=null, systemd-udevd needs valid stdin, stdout and stderr to work + sh -c "exec 4< /dev/console" || { exec 0> /dev/null; exec 1> /dev/null; exec 2> /dev/null; } + + $_UDEV_DAEMON --daemon + udevadm trigger --action=add + udevadm settle +} diff --git a/board/phytium/common/busybox_initrd_overlay/init.d/90-rootfs b/board/phytium/common/busybox_initrd_overlay/init.d/90-rootfs new file mode 100755 index 00000000..10b95831 --- /dev/null +++ b/board/phytium/common/busybox_initrd_overlay/init.d/90-rootfs @@ -0,0 +1,66 @@ +#!/bin/sh +# Copyright (C) 2011 O.S. Systems Software LTDA. +# Licensed on MIT + +rootfs_enabled() { + return 0 +} + +rootfs_run() { + if [ -z "$ROOTFS_DIR" ]; then + return + fi + C=0 + delay=${bootparam_rootdelay:-1} + timeout=${bootparam_roottimeout:-5} + while ! mountpoint -q $ROOTFS_DIR; do + if [ $(( $C * $delay )) -gt $timeout ]; then + fatal "root '$bootparam_root' doesn't exist or does not contain a /dev." + fi + + if [ -n "$bootparam_root" ]; then + debug "No e2fs compatible filesystem has been mounted, mounting $bootparam_root..." + + if [ "`echo ${bootparam_root} | cut -c1-5`" = "UUID=" ]; then + root_uuid=`echo $bootparam_root | cut -c6-` + bootparam_root="/dev/disk/by-uuid/$root_uuid" + elif [ "`echo ${bootparam_root} | cut -c1-9`" = "PARTUUID=" ]; then + root_partuuid=`echo $bootparam_root | cut -c10-` + bootparam_root="/dev/disk/by-partuuid/$root_partuuid" + elif [ "`echo ${bootparam_root} | cut -c1-10`" = "PARTLABEL=" ]; then + root_partlabel=`echo $bootparam_root | cut -c11-` + bootparam_root="/dev/disk/by-partlabel/$root_partlabel" + elif [ "`echo ${bootparam_root} | cut -c1-6`" = "LABEL=" ]; then + root_label=`echo $bootparam_root | cut -c7-` + bootparam_root="/dev/disk/by-label/$root_label" + fi + + if [ -e "$bootparam_root" ]; then + flags="" + if [ -n "$bootparam_ro" ] && ! echo "$bootparam_rootflags" | grep -w -q "ro"; then + if [ -n "$bootparam_rootflags" ]; then + bootparam_rootflags="$bootparam_rootflags," + fi + bootparam_rootflags="${bootparam_rootflags}ro" + fi + if [ -n "$bootparam_rootflags" ]; then + flags="$flags -o$bootparam_rootflags" + fi + if [ -n "$bootparam_rootfstype" ]; then + flags="$flags -t$bootparam_rootfstype" + fi + mount $flags $bootparam_root $ROOTFS_DIR + if mountpoint -q $ROOTFS_DIR; then + break + else + # It is unlikely to change, but keep trying anyway. + # Perhaps we pick a different device next time. + umount $ROOTFS_DIR + fi + fi + fi + debug "Sleeping for $delay second(s) to wait root to settle..." + sleep $delay + C=$(( $C + 1 )) + done +} diff --git a/board/phytium/common/busybox_initrd_overlay/init.d/99-finish b/board/phytium/common/busybox_initrd_overlay/init.d/99-finish new file mode 100755 index 00000000..866bb1cc --- /dev/null +++ b/board/phytium/common/busybox_initrd_overlay/init.d/99-finish @@ -0,0 +1,28 @@ +#!/bin/sh +# Copyright (C) 2011 O.S. Systems Software LTDA. +# Licensed on MIT + +finish_enabled() { + return 0 +} + +finish_run() { + if [ -n "$ROOTFS_DIR" ]; then + if [ ! -d $ROOTFS_DIR/dev ]; then + fatal "ERROR: There's no '/dev' on rootfs." + fi + + info "Switching root to '$ROOTFS_DIR'..." + + debug "Moving /dev, /proc and /sys onto rootfs..." + + mount --move /dev $ROOTFS_DIR/dev + #mount --move /proc $ROOTFS_DIR/proc + mount --move /sys $ROOTFS_DIR/sys + + cd $ROOTFS_DIR + exec switch_root -c /dev/console $ROOTFS_DIR ${bootparam_init:-/sbin/init} + else + debug "No rootfs has been set" + fi +} diff --git a/board/phytium/common/debian-archive-bullseye-stable.gpg b/board/phytium/common/debian-archive-bullseye-stable.gpg new file mode 100644 index 0000000000000000000000000000000000000000..8ecabc7d2d689ce33591e59920f3ecb2cdcd1fbe GIT binary patch literal 2453 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 literal 0 HcmV?d00001 diff --git a/board/phytium/common/debian-package-installer b/board/phytium/common/debian-package-installer new file mode 100755 index 00000000..c193ec68 --- /dev/null +++ b/board/phytium/common/debian-package-installer @@ -0,0 +1,116 @@ +#!/bin/bash + +DISTROTYPE=$3 +DISTROSCALE=$5 +tarch=$1 + +do_distrorfs_second_stage() { + [ -f /etc/buildinfo -a ! -f /proc/uptime ] && return + packages_list=/usr/aptpkg/$4 + . $packages_list + + echo "1." $1 + echo "2." $2 + echo "3." $3 + echo "4." $4 + echo "5." $5 + echo "6." $6 + if [ ! -d /home/user ]; then + useradd -m -d /home/user -s /bin/bash user + gpasswd -a user sudo + echo -e 'root\nroot\n' | passwd root + echo -e 'user\nuser\n' | passwd user + usermod -aG sudo user + chown -R user:user /home/user + fi + if [ -d /etc/shadow ]; then + cd /etc + chmod u=rw,g=r,o=r shadow + fi + # set default hostname + echo localhost > /etc/hostname + + # set apt sources list to install additional packages + asl=/etc/apt/sources.list + rm -f $asl + cat <<-EOF > $asl + deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free + deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free + deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free + deb http://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free + EOF + chmod +777 /tmp + apt update + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C \ + apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" update || exit 1 + + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C \ + apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade || exit 1 + echo upgraded + + export LC_ALL=C LANGUAGE=C LANG=C + + echo installing base packages: $pkglist + for pkg in $additional_base_packages_list; do + echo Installing $pkg ... + DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install $pkg || exit 1 + done + + dpkg -l | grep linux-headers | cut -d ' ' -f3 | xargs dpkg --purge + dpkg -l | grep linux-kbuild | cut -d ' ' -f3 | xargs dpkg --purge + + echo installed additional packages. + if [ $6 = desktop ]; then + for pkg in task-xfce-desktop ukui-greeter; do + DEBIAN_FRONTEND=noninteractive apt -y install $pkg || true + done + usermod -a -G video,render,audio user + + ln -sf /lib/systemd/system/lightdm.service /etc/systemd/system/display-manager.service + sed -i "s/gdm3/lightdm/" /etc/X11/default-display-manager + echo '[SeatDefaults]' >> /etc/lightdm/lightdm.conf + echo 'greeter-session=ukui-greeter' >> /etc/lightdm/lightdm.conf + echo 'user-session=xfce' >> /etc/lightdm/lightdm.conf + + fi + + # clean cached packages + apt-get clean + + + if [ $1 = arm64 ]; then + sysarch=aarch64-linux-gnu + elif [ $1 = armhf ]; then + sysarch=arm-linux-gnueabihf + fi + + + [ -f /usr/bin/sudo -a ! -u /usr/bin/sudo ] && chmod +s /usr/bin/sudo + [ -d /var/cache/man ] && chown -R man:root /var/cache/man + [ -d /var/lib/sddm ] && chown -R sddm:sddm /var/lib/sddm + + # some shared libraries locate in /lib/aarch64-linux-gnu(or /lib/arm-linux-gnueabihf) and /usr/local/lib + echo export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/$sysarch:/lib/$sysarch >> /etc/profile + + tmpusr=`ls -t /home | cut -d' ' -f1 | head -1` + [ -d /home/$tmpusr -a "$tmpusr" != "user" ] && rm -rf /home/$tmpusr + + test -c /dev/pts/0 && umount /dev/pts + test -f /proc/uptime && umount /proc + + echo APT Packages List: > /etc/packages.list + echo -e "Package\t Version\t Download-Size\t APT-Sources" >> /etc/packages.list + apt list --installed | cut -d/ -f1 | xargs apt show | \ + grep -E '^Package:|^APT-Sources:|^Version:|^Download-Size:' > packagelist + lnum=`wc -l packagelist |cut -d' ' -f1` + for((i=1; i<$lnum;)); do + t=$[ $i + 3 ] + sed -n "${i},${t}p" packagelist | grep -E 'Package:|APT-Sources:|Version:|Download-Size:' | \ + tr "\n" " " | cut -d' ' -f2,4,6,7,9,10 >> /etc/packages.list + i=$[ $i + 4 ] + done + rm -f packagelist +} + +do_distrorfs_second_stage $1 $2 $3 $4 $5 $6 +# end second stage installing diff --git a/board/phytium/common/linux-4.19/scripts/basic/fixdep b/board/phytium/common/linux-4.19/scripts/basic/fixdep new file mode 100755 index 0000000000000000000000000000000000000000..e88975ce167f585f5ca6438318d70182b13c9a73 GIT binary patch literal 14688 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

@!ho67Wfs5I#(TIIGwBGNZEzgC@ zQ=;{u*4cCC%=UQXzv0sL{zz=DCoHA~#I&|Q%oRKZ;mMElZ06mTZ=+ck`hy*Y;LzC! z_4w^GbU59HqiFU)JDgK%77e~=L(Eqz5Ih=dt*e9D(D5}h)@0(yT*!*z@LC{j);ET0 zeT`-y7LG(sUu&E2hnt!kE$k6{=498P!*oH@7m4^bnN}zk*@Uxmz9!2Iv^F(uf{DVJ z(2S+2T8(wH2=s*4Lv>|!`E4uA6>FE9I6IfF91!O6KU-UV+v>`6iG5@b5RU7bD^^Jl ztCm*_vue${it;t)x|J)}ukf1Q@`^PpOnIQtP>=IDNB{iMR=Xl}A`oX1RSi1SsPfMF zMiu$^BZ0Ni=+KG4wBv`W4>~TX^3L%_6)`Q^<3?SbQ;^E3#xyOH;^AWe+R)i(SEcl= zL*<7Zd{l+bAxss)5J3t~ZRh}IFwL2L^fFyN{Wzov8tVYPF4kk2j4PiHhU1kp$&Y8leJc)S$IO> znB~E`=BaJPC#YG$fP~5`R?mw0>V++%RY7}v}85j6~7_~Wqy zILFqrz*BT^7k3ro101#kMZr6TJZ!ZOySg@4qmeMoLP- zV=1jH1gF}!Nk>feG;Mm9PcO^CetN=<^JhJ#8zHAXQs#NT ziK#B_DSwL1`Ab-A#tpS8+w;B@Q{JcL_-xPh-y!WQq(k2KWok&rWKUZJnf4C@qr50T zD!fn5RBi`2Lj29_|NDWd_Pig)v?HUz^9MaSH|-hrywAY&g{#vIGVQ;fVbA+(Of&T} z^Y4)M-2S`|$8 z{XhQyl`{32XZkX1>D)To^Y8Hk@(?=fLB%f2Gd%^A=O!ue?{@zG!MbJsJigeD`=tjq zq{8v}_xdh*i1|)(suZ?o`YvRuJ?~GRmG+dMTG)>1e?X|(cj?4o9_Ti~Za@a9gR^L1{tjQ5NZ^0j-x*Km+e0_h&VS+c8(1p#AggqTd`laiMUgKV4~;9 t=Wua+IZW+y1)RHM;rzXwKER_K&ls>A-;p}Msk7Oa%yl%h41)|-{3o$wr5OMK literal 0 HcmV?d00001 diff --git a/board/phytium/common/linux-4.19/scripts/genksyms/genksyms b/board/phytium/common/linux-4.19/scripts/genksyms/genksyms new file mode 100755 index 0000000000000000000000000000000000000000..fc7af3df1d604aaaa70767e5b2d9150011fb4fb0 GIT binary patch literal 62272 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 O4e9&(8mHyf@c#m^i3gAX literal 0 HcmV?d00001 diff --git a/board/phytium/common/linux-4.19/scripts/mod/modpost b/board/phytium/common/linux-4.19/scripts/mod/modpost new file mode 100755 index 0000000000000000000000000000000000000000..b4a979629e47f7500e40be7bee7e7a3fcc98ef6c GIT binary patch literal 85992 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 literal 0 HcmV?d00001 diff --git a/board/phytium/common/linux-5.10/scripts/basic/fixdep b/board/phytium/common/linux-5.10/scripts/basic/fixdep new file mode 100755 index 0000000000000000000000000000000000000000..5285f284c3895be52d23df1cf6e2c49aedeffa5b GIT binary patch literal 14408 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 F|1S+X3j+WE literal 0 HcmV?d00001 diff --git a/board/phytium/common/linux-5.10/scripts/mod/modpost b/board/phytium/common/linux-5.10/scripts/mod/modpost new file mode 100755 index 0000000000000000000000000000000000000000..7ddfbabc28e303a102802ef4891174bb44d6a3c9 GIT binary patch literal 89856 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 debian/hdrsrcfiles + + { + if grep -q "^CONFIG_STACK_VALIDATION=y" include/config/auto.conf; then + echo tools/objtool/objtool + fi + + find arch/arm64/include Module.symvers include scripts -type f + + if grep -q "^CONFIG_GCC_PLUGINS=y" include/config/auto.conf; then + find scripts/gcc-plugins -name \*.so + fi + } > debian/hdrobjfiles + + destdir=$pdir/usr/src/linux-headers-$version + mkdir -p $destdir + tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir + tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir + rm -rf debian + + # copy .config manually to be where it's expected to be + cp .config $destdir/.config + # used to build dma + cp drivers/dma/dmaengine.h $1/usr/include + cp drivers/dma/virt-dma.h $1/usr/include + find $destdir -name "*.o" -type f -exec rm -rf {} \; + cd $topdir + cp -r board/phytium/common/linux-5.10/scripts $destdir + + rm -rf $srctree + rm -rf $objtree + ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build +} + +deploy_kernel_headers_419 () { + topdir=$(pwd) + pdir=$1 + version=$2 + srctree=$pdir/lib/modules/$version/source + objtree=$pdir/lib/modules/$version/build + cd $objtree + mkdir debian + + (cd $srctree; find . -name Makefile\* -o -name Kconfig\* -o -name \*.pl) > "$objtree/debian/hdrsrcfiles" + (cd $srctree; find arch/*/include include scripts -type f -o -type l) >> "$objtree/debian/hdrsrcfiles" + (cd $srctree; find arch/arm64 -name module.lds -o -name Kbuild.platforms -o -name Platform) >> "$objtree/debian/hdrsrcfiles" + (cd $srctree; find $(find arch/arm64 -name include -o -name scripts -type d) -type f) >> "$objtree/debian/hdrsrcfiles" + if grep -q '^CONFIG_STACK_VALIDATION=y' .config ; then + (cd $objtree; find tools/objtool -type f -executable) >> "$objtree/debian/hdrobjfiles" + fi + (cd $objtree; find arch/arm64/include Module.symvers include scripts -type f) >> "$objtree/debian/hdrobjfiles" + if grep -q '^CONFIG_GCC_PLUGINS=y' .config ; then + (cd $objtree; find scripts/gcc-plugins -name \*.so -o -name gcc-common.h) >> "$objtree/debian/hdrobjfiles" + fi + destdir=$pdir/usr/src/linux-headers-$version + mkdir -p "$destdir" + (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -) + (cd $objtree; tar -c -f - -T -) < "$objtree/debian/hdrobjfiles" | (cd $destdir; tar -xf -) + (cd $objtree; cp .config $destdir/.config) # copy .config manually to be where it's expected to be + (cd $srctree; cp --parents tools/include/tools/be_byteshift.h $destdir) + (cd $srctree; cp --parents tools/include/tools/le_byteshift.h $destdir) + (cd $srctree; cp drivers/dma/dmaengine.h $1/usr/include) # used to build dma + (cd $srctree; cp drivers/dma/virt-dma.h $1/usr/include) + find $destdir -name "*.o" -type f -exec rm -rf {} \; + cd $topdir + cp -r board/phytium/common/linux-4.19/scripts $destdir + rm -rf "$objtree/debian" + + rm -rf $srctree + rm -rf $objtree + ln -sf "/usr/src/linux-headers-$version" "$pdir/lib/modules/$version/build" +} + +main() +{ + # $1 - the current rootfs directory, skeleton-custom or target + + if [ ! -d $1/lib/modules ]; then + make linux-rebuild ${O:+O=$O} + fi + + KERNELVERSION=`ls $1/lib/modules` + if grep -Eq "^BR2_ROOTFS_LINUX_HEADERS=y$" ${BR2_CONFIG} && [ -L $1/lib/modules/${KERNELVERSION}/source ]; then + if [[ ${KERNELVERSION} = 5.10* || ${KERNELVERSION} = 5.15* ]];then + deploy_kernel_headers_510 $1 ${KERNELVERSION} + elif [[ ${KERNELVERSION} = 4.19* ]];then + deploy_kernel_headers_419 $1 ${KERNELVERSION} + else + echo "error: linux kernel version is not 4.19, 5.10, or 5.15." + fi + fi + + if grep -Eq "^BR2_ROOTFS_CHOWN=y$" ${BR2_CONFIG}; then + sudo chroot ${1} systemctl enable systemd-rootfs-chown.service + fi + + if grep -Eq "^BR2_PACKAGE_PHYTIUM_OPTEE=y$" ${BR2_CONFIG}; then + # add tee-supplicant systemd service + cp -dpf package/phytium-optee/phytium-tee-supplicant.service $1/lib/systemd/system/phytium-tee-supplicant.service + # default set start tee-supplicant + ln -sf /lib/systemd/system/phytium-tee-supplicant.service $1/etc/systemd/system/sysinit.target.wants/phytium-tee-supplicant.service + fi + + exit $? +} + +main $@ diff --git a/board/phytium/common/post-custom-skeleton-debian-11.sh b/board/phytium/common/post-custom-skeleton-debian-11.sh new file mode 100755 index 00000000..c1ad5dd5 --- /dev/null +++ b/board/phytium/common/post-custom-skeleton-debian-11.sh @@ -0,0 +1,207 @@ +#!/usr/bin/env bash + +distro=bullseye + +trap recover_from_ctrl_c INT + +recover_from_ctrl_c() +{ + do_recover_from_error "Interrupt caught ... exiting" + exit 1 +} + +do_recover_from_error() +{ + sudo chroot $RFSDIR /bin/umount /proc > /dev/null 2>&1; + sudo chroot $RFSDIR /bin/umount /sys > /dev/null 2>&1; + USER=$(id -u); GROUPS=${GROUPS}; \ + sudo chroot $RFSDIR /bin/chown -R ${USER}:${GROUPS} / > /dev/null 2>&1; + echo -e "\n************" + echo $1 + echo -e " Please running the below commands before re-compiling:" + echo -e " rm -rf $RFSDIR" + echo -e " make skeleton-custom-dirclean" + echo -e " Or\n make skeleton-custom-dirclean O=" +} + +do_distrorfs_first_stage() { +# $1: platform architecture, arm64 +# $2: rootfs directory, output/build/skeleton-custom +# $3: board/phytium/common/ubuntu-additional_packages_list +# $4: bullseye +# $5: debian +# $6: plat name +# $7: desktop or base + + DISTROTYPE=$5 + [ -z "$RFSDIR" ] && RFSDIR=$2 + [ -z $RFSDIR ] && echo No RootFS exist! && return + [ -f $RFSDIR/etc/.firststagedone ] && echo $RFSDIR firststage exist! && return + [ -f /etc/.firststagedone -a ! -f /proc/uptime ] && return + + if [ $1 = arm64 ]; then + tgtarch=aarch64 + elif [ $1 = armhf ]; then + tgtarch=arm + fi + + qemu-${tgtarch}-static -version > /dev/null 2>&1 + if [ "x$?" != "x0" ]; then + echo qemu-${tgtarch}-static not found + exit 1 + fi + + debootstrap --version > /dev/null 2>&1 + if [ "x$?" != "x0" ]; then + echo debootstrap not found + exit 1 + fi + + sudo chown 0:0 $RFSDIR + sudo mkdir -p $2/usr/local/bin + sudo cp -f board/phytium/common/debian-package-installer $RFSDIR/usr/local/bin/ + packages_list=board/phytium/common/$3 + [ ! -f $packages_list ] && echo $packages_list not found! && exit 1 + + echo additional packages list: $packages_list + if [ ! -d $RFSDIR/usr/aptpkg ]; then + sudo mkdir -p $RFSDIR/usr/aptpkg + sudo cp -f $packages_list $RFSDIR/usr/aptpkg + fi + + sudo mkdir -p $RFSDIR/etc + sudo cp -f /etc/resolv.conf $RFSDIR/etc/resolv.conf + + if [ ! -d $RFSDIR/debootstrap ]; then + echo "testdeboot" + export LANG=en_US.UTF-8 + sudo debootstrap --keyring=board/phytium/common/debian-archive-bullseye-stable.gpg --arch=$1 --foreign bullseye $RFSDIR https://mirrors.tuna.tsinghua.edu.cn/debian/ + + [ $1 != amd64 -a ! -f $RFSDIR/usr/bin/qemu-${tgtarch}-static ] && sudo cp $(which qemu-${tgtarch}-static) $RFSDIR/usr/bin + echo "installing for second-stage ..." + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C \ + sudo chroot $RFSDIR /debootstrap/debootstrap --variant=minbase --second-stage + if [ "x$?" != "x0" ]; then + do_recover_from_error "debootstrap failed in second-stage" + exit 1 + fi + + echo "configure ... " + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C \ + sudo chroot $RFSDIR dpkg --configure -a + fi + + sudo chroot $RFSDIR debian-package-installer $1 $distro $5 $3 $6 $7 + if [ "x$?" != "x0" ]; then + do_recover_from_error "debian-package-installer failed" + exit 1 + fi + + # sudo chroot $RFSDIR systemctl enable systemd-rootfs-resize + file_s=$(sudo find $RFSDIR -perm -4000) + sudo chown -R $USER:$GROUPS $RFSDIR + for f in $file_s; do + sudo chmod u+s $f + done + sudo chmod u+s $RFSDIR/sbin/unix_chkpwd + + if [ $distro = bullseye ]; then + echo debian,11 | tee $RFSDIR/etc/.firststagedone 1>/dev/null + elif [ $distro = bionic ]; then + echo Ubuntu,18.04.5 | tee $RFSDIR/etc/.firststagedone 1>/dev/null + fi + setup_distribution_info $5 $2 $1 + + #rm $RFSDIR/etc/apt/apt.conf + sudo rm $RFSDIR/dev/* -rf +} + +setup_distribution_info () { + DISTROTYPE=$1 + RFSDIR=$2 + tarch=$3 + distroname=`head -1 $RFSDIR/etc/.firststagedone | cut -d, -f1` + distroversion=`head -1 $RFSDIR/etc/.firststagedone | cut -d, -f2` + releaseversion="$distroname (based on $DISTROTYPE-$distroversion-base) ${tarch}" + releasestamp="Build: `date +'%Y-%m-%d %H:%M:%S'`" + echo $releaseversion > $RFSDIR/etc/buildinfo + sed -i "1 a\\$releasestamp" $RFSDIR/etc/buildinfo + if grep U-Boot $RFSDIR/etc/.firststagedone 1>$RFSDIR/dev/null 2>&1; then + tail -1 $RFSDIR/etc/.firststagedone >> $RFSDIR/etc/buildinfo + fi + + if [ $DISTROTYPE = ubuntu ]; then + echo $distroname $1-$distroversion > $RFSDIR/etc/issue + echo $distroname $1-$distroversion > $RFSDIR/etc/issue.net + + tgtfile=$RFSDIR/etc/lsb-release + echo DISTRIB_ID=Phytium > $tgtfile + echo DISTRIB_RELEASE=$distroversion >> $tgtfile + echo DISTRIB_CODENAME=$distro >> $tgtfile + echo DISTRIB_DESCRIPTION=\"$distroname $1-$distroversion\" >> $tgtfile + + tgtfile=$RFSDIR/etc/update-motd.d/00-header + echo '#!/bin/sh' > $tgtfile + echo '[ -r /etc/lsb-release ] && . /etc/lsb-release' >> $tgtfile + echo 'printf "Welcome to %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"' >> $tgtfile + + tgtfile=$RFSDIR/etc/update-motd.d/10-help-text + echo '#!/bin/sh' > $tgtfile + echo 'printf "\n"' >> $tgtfile + echo 'printf " * Support: https://www.phytium.com.cn\n"' >> $tgtfile + + tgtfile=$RFSDIR/usr/lib/os-release + echo NAME=\"$distroname\" > $tgtfile + echo VERSION=${DISTROTYPE}-$distroversion >> $tgtfile + echo ID=debian >> $tgtfile + echo VERSION_ID=$distroversion >> $tgtfile + echo PRETTY_NAME=\"Ubuntu Built with Buildroot, based on Ubuntu $distroversion LTS\" >> $tgtfile + echo VERSION_CODENAME=$distro >> $tgtfile + + rm -f $RFSDIR/etc/default/motd-news + rm -f $RFSDIR/etc/update-motd.d/50-motd-news + fi +} + +plat_name() +{ + echo "phytium" +} + +arch_type() +{ + if grep -Eq "^BR2_aarch64=y$" ${BR2_CONFIG}; then + echo "arm64" + elif grep -Eq "^BR2_arm=y$" ${BR2_CONFIG}; then + echo "armhf" + fi +} + +full_rtf() +{ + if grep -Eq "^BR2_PACKAGE_ROOTFS_DESKTOP=y$" ${BR2_CONFIG}; then + echo "desktop" + else + echo "base" + fi +} + +main() +{ + # $1 - the current rootfs directory, skeleton-custom or target + rm -rf $1/* + + # run first stage do_distrorfs_first_stage arm64 ${1} ubuntu-additional_packages_list bullseye debian + do_distrorfs_first_stage $(arch_type) ${1} ubuntu-additional_packages_list bullseye debian $(plat_name) $(full_rtf) + + # change the hostname to "platforms-Ubuntu" + echo $(plat_name)-debian > ${1}/etc/hostname + + if ! grep -q "$(plat_name)-debian" ${1}/etc/hosts; then + echo 127.0.0.1 $(plat_name)-debian | sudo tee -a ${1}/etc/hosts 1>/dev/null + fi + + exit $? +} + +main $@ diff --git a/board/phytium/common/post-custom-skeleton-ubuntu.sh b/board/phytium/common/post-custom-skeleton-ubuntu.sh new file mode 100755 index 00000000..26414115 --- /dev/null +++ b/board/phytium/common/post-custom-skeleton-ubuntu.sh @@ -0,0 +1,217 @@ +#!/usr/bin/env bash + +trap recover_from_ctrl_c INT + +recover_from_ctrl_c() +{ + do_recover_from_error "Interrupt caught ... exiting" + exit 1 +} + +do_recover_from_error() +{ + sudo chroot $RFSDIR /bin/umount /proc > /dev/null 2>&1; + sudo chroot $RFSDIR /bin/umount /sys > /dev/null 2>&1; + USER=$(id -u); GROUPS=${GROUPS}; \ + sudo chroot $RFSDIR /bin/chown -R ${USER}:${GROUPS} / > /dev/null 2>&1; + echo -e "\n************" + echo $1 + echo -e " Please running the below commands before re-compiling:" + echo -e " rm -rf $RFSDIR" + echo -e " make skeleton-custom-dirclean" + echo -e " Or\n make skeleton-custom-dirclean O=" +} + +do_distrorfs_first_stage() { +# $1: platform architecture, arm64 +# $2: rootfs directory, output/build/skeleton-custom +# $3: board/phytium/common/ubuntu-additional_packages_list +# $4: focal +# $5: ubuntu +# $6: plat name +# $7: desktop or base + + DISTROTYPE=$5 + [ -z "$RFSDIR" ] && RFSDIR=$2 + [ -z $RFSDIR ] && echo No RootFS exist! && return + [ -f $RFSDIR/etc/.firststagedone ] && echo $RFSDIR firststage exist! && return + [ -f /etc/.firststagedone -a ! -f /proc/uptime ] && return + + if [ $1 = arm64 ]; then + tgtarch=aarch64 + elif [ $1 = armhf ]; then + tgtarch=arm + fi + + qemu-${tgtarch}-static -version > /dev/null 2>&1 + if [ "x$?" != "x0" ]; then + echo qemu-${tgtarch}-static not found + exit 1 + fi + + debootstrap --version > /dev/null 2>&1 + if [ "x$?" != "x0" ]; then + echo debootstrap not found + exit 1 + fi + + sudo chown 0:0 $RFSDIR + sudo mkdir -p $2/usr/local/bin + sudo cp -f board/phytium/common/ubuntu-package-installer $RFSDIR/usr/local/bin/ + packages_list=board/phytium/common/$3 + [ ! -f $packages_list ] && echo $packages_list not found! && exit 1 + + echo additional packages list: $packages_list + if [ ! -d $RFSDIR/usr/aptpkg ]; then + sudo mkdir -p $RFSDIR/usr/aptpkg + sudo cp -f $packages_list $RFSDIR/usr/aptpkg + fi + + sudo mkdir -p $RFSDIR/etc + sudo cp -f /etc/resolv.conf $RFSDIR/etc/resolv.conf + + if [ ! -d $RFSDIR/debootstrap ]; then + echo "testdeboot" + export LANG=en_US.UTF-8 + sudo debootstrap --arch=$1 --foreign $4 $RFSDIR https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports + + [ $1 != amd64 -a ! -f $RFSDIR/usr/bin/qemu-${tgtarch}-static ] && sudo cp $(which qemu-${tgtarch}-static) $RFSDIR/usr/bin + echo "installing for second-stage ..." + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C \ + sudo chroot $RFSDIR /debootstrap/debootstrap --second-stage + if [ "x$?" != "x0" ]; then + do_recover_from_error "debootstrap failed in second-stage" + exit 1 + fi + + echo "configure ... " + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C \ + sudo chroot $RFSDIR dpkg --configure -a + fi + + sudo chroot $RFSDIR ubuntu-package-installer $1 $4 $5 $3 $6 $7 + if [ "x$?" != "x0" ]; then + do_recover_from_error "ubuntu-package-installer failed" + exit 1 + fi + + # sudo chroot $RFSDIR systemctl enable systemd-rootfs-resize + file_s=$(sudo find $RFSDIR -perm -4000) + sudo chown -R $USER:$GROUPS $RFSDIR + for f in $file_s; do + sudo chmod u+s $f + done + sudo chmod u+s $RFSDIR/sbin/unix_chkpwd + + if dpkg-query -l snapd | grep ii 1>/dev/null; then + chmod +rw -R $RFSDIR/var/lib/snapd/ + fi + + if [ $4 = focal ]; then + echo Ubuntu,20.04 | tee $RFSDIR/etc/.firststagedone 1>/dev/null + elif [ $4 = jammy ]; then + echo Ubuntu,22.04 | tee $RFSDIR/etc/.firststagedone 1>/dev/null + fi + setup_distribution_info $5 $2 $1 $4 + + #rm $RFSDIR/etc/apt/apt.conf + rm $RFSDIR/dev/* -rf +} + +setup_distribution_info () { + DISTROTYPE=$1 + RFSDIR=$2 + tarch=$3 + distro=$4 + distroname=`head -1 $RFSDIR/etc/.firststagedone | cut -d, -f1` + distroversion=`head -1 $RFSDIR/etc/.firststagedone | cut -d, -f2` + releaseversion="$distroname (based on $DISTROTYPE-$distroversion-base) ${tarch}" + releasestamp="Build: `date +'%Y-%m-%d %H:%M:%S'`" + echo $releaseversion > $RFSDIR/etc/buildinfo + sed -i "1 a\\$releasestamp" $RFSDIR/etc/buildinfo + if grep U-Boot $RFSDIR/etc/.firststagedone 1>$RFSDIR/dev/null 2>&1; then + tail -1 $RFSDIR/etc/.firststagedone >> $RFSDIR/etc/buildinfo + fi + + if [ $DISTROTYPE = ubuntu ]; then + echo $distroname $1-$distroversion > $RFSDIR/etc/issue + echo $distroname $1-$distroversion > $RFSDIR/etc/issue.net + + tgtfile=$RFSDIR/etc/lsb-release + echo DISTRIB_ID=Phytium > $tgtfile + echo DISTRIB_RELEASE=$distroversion >> $tgtfile + echo DISTRIB_CODENAME=$distro >> $tgtfile + echo DISTRIB_DESCRIPTION=\"$distroname $1-$distroversion\" >> $tgtfile + + tgtfile=$RFSDIR/etc/update-motd.d/00-header + echo '#!/bin/sh' > $tgtfile + echo '[ -r /etc/lsb-release ] && . /etc/lsb-release' >> $tgtfile + echo 'printf "Welcome to %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"' >> $tgtfile + + tgtfile=$RFSDIR/etc/update-motd.d/10-help-text + echo '#!/bin/sh' > $tgtfile + echo 'printf "\n"' >> $tgtfile + echo 'printf " * Support: https://www.phytium.com.cn\n"' >> $tgtfile + + tgtfile=$RFSDIR/usr/lib/os-release + echo NAME=\"$distroname\" > $tgtfile + echo VERSION=${DISTROTYPE}-$distroversion >> $tgtfile + echo ID=ubuntu >> $tgtfile + echo VERSION_ID=$distroversion >> $tgtfile + echo PRETTY_NAME=\"Ubuntu Built with Buildroot, based on Ubuntu $distroversion LTS\" >> $tgtfile + echo VERSION_CODENAME=$distro >> $tgtfile + + rm -f $RFSDIR/etc/default/motd-news + rm -f $RFSDIR/etc/update-motd.d/50-motd-news + fi +} + +plat_name() +{ + echo "phytium" +} + +arch_type() +{ + if grep -Eq "^BR2_aarch64=y$" ${BR2_CONFIG}; then + echo "arm64" + elif grep -Eq "^BR2_arm=y$" ${BR2_CONFIG}; then + echo "armhf" + fi +} + +full_rtf() +{ + if grep -Eq "^BR2_PACKAGE_ROOTFS_DESKTOP=y$" ${BR2_CONFIG}; then + echo "desktop" + else + echo "base" + fi +} + +ubuntu_distro() +{ + if grep -Eq "^BR2_ROOTFS_SKELETON_UBUNTU_FOCAL=y$" ${BR2_CONFIG}; then + echo "focal" + else + echo "jammy" + fi +} + +main() +{ + # $1 - the current rootfs directory, skeleton-custom or target + rm -rf $1/* + + # run first stage do_distrorfs_first_stage arm64 ${1} ubuntu-additional_packages_list focal ubuntu + do_distrorfs_first_stage $(arch_type) ${1} ubuntu-additional_packages_list $(ubuntu_distro) ubuntu $(plat_name) $(full_rtf) + + # change the hostname to "platforms-Ubuntu" + echo $(plat_name)-Ubuntu > ${1}/etc/hostname + + sed -i "s/float(n\[0\])/float(n[0].split()[0])/" ${1}/usr/share/pyshared/lsb_release.py + + exit $? +} + +main $@ diff --git a/board/phytium/common/ubuntu-additional_packages_list b/board/phytium/common/ubuntu-additional_packages_list new file mode 100644 index 00000000..af2befde --- /dev/null +++ b/board/phytium/common/ubuntu-additional_packages_list @@ -0,0 +1,11 @@ +# additional packages list for SDK main userland gathered from main repo +additional_full_packages_list=" " + +additional_desktop_packages_list="network-manager-gnome" + +# for Lite userland gathered from main repo +additional_base_packages_list="net-tools iputils-ping gcc g++ vim make autoconf automake libtool pkg-config bison bc flex libssl-dev openssh-server python-is-python3 \ +libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools \ +gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-pulseaudio \ +dkms initramfs-tools debhelper libgles-dev libexpat1-dev libglvnd-dev ffmpeg \ +network-manager wpasupplicant wireless-tools parted locales" diff --git a/board/phytium/common/ubuntu-package-installer b/board/phytium/common/ubuntu-package-installer new file mode 100755 index 00000000..9d33f56e --- /dev/null +++ b/board/phytium/common/ubuntu-package-installer @@ -0,0 +1,136 @@ +#!/bin/bash + +DISTROTYPE=$3 +DISTROSCALE=$5 +tarch=$1 + +do_distrorfs_second_stage() { + [ -f /etc/buildinfo -a ! -f /proc/uptime ] && return + packages_list=/usr/aptpkg/$4 + . $packages_list + + echo "1." $1 + echo "2." $2 + echo "3." $3 + echo "4." $4 + echo "5." $5 + echo "6." $6 + if [ ! -d /home/user ]; then + useradd -m -d /home/user -s /bin/bash user + gpasswd -a user sudo + echo -e 'root\nroot\n' | passwd root + echo -e 'user\nuser\n' | passwd user + usermod -aG sudo user + chown -R user:user /home/user + fi + if [ -d /etc/shadow ]; then + cd /etc + chmod u=rw,g=r,o=r shadow + fi + # set default hostname + echo localhost > /etc/hostname + + test -f /proc/uptime || mount -t proc proc /proc + + # set apt sources list to install additional packages + asl=/etc/apt/sources.list + rm -f $asl + cat <<-EOF > $asl + deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ $2 main restricted universe multiverse + deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ $2-updates main restricted universe multiverse + deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ $2-backports main restricted universe multiverse + deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ $2-security main restricted universe multiverse + EOF + chmod +777 /tmp + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C \ + apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" update || exit 1 + + DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true LC_ALL=C LANGUAGE=C LANG=C \ + apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade || exit 1 + echo upgraded + + export LC_ALL=C LANGUAGE=C LANG=C + + echo installing base packages: $pkglist + for pkg in $additional_base_packages_list; do + echo Installing $pkg ... + DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install $pkg || exit 1 + done + + dpkg -l | grep linux-headers | cut -d ' ' -f3 | xargs dpkg --purge + + test -f /dev/pts/ptmx || mount -t devpts devpts /dev/pts + + echo installed additional packages. + if [ $6 = desktop ]; then + for pkg in xfce4 ukui-greeter; do + DEBIAN_FRONTEND=noninteractive apt -y install $pkg || true + done + if [ $2 = jammy ]; then + sed -i 's/debian-x-terminal-emulator/gnome-terminal/g' /etc/xdg/xfce4/helpers.rc || true + DEBIAN_FRONTEND=noninteractive apt -y install software-properties-common || true + DEBIAN_FRONTEND=noninteractive add-apt-repository -y ppa:mozillateam/ppa || true + sed -i 's/ppa.launchpadcontent.net/launchpad.proxy.ustclug.org/g' /etc/apt/sources.list.d/mozillateam-*.list && \ + DEBIAN_FRONTEND=noninteractive apt -y update || true + cat <<-EOF > /etc/apt/preferences.d/mozillateamppa + Package: firefox + Pin: release o=LP-PPA-mozillateam + Pin-Priority: 501 + EOF + fi + DEBIAN_FRONTEND=noninteractive apt -y install firefox || true + + usermod -a -G video,render,audio user + + ln -sf /lib/systemd/system/lightdm.service /etc/systemd/system/display-manager.service + sed -i "s/gdm3/lightdm/" /etc/X11/default-display-manager + echo '[SeatDefaults]' >> /etc/lightdm/lightdm.conf + echo 'greeter-session=ukui-greeter' >> /etc/lightdm/lightdm.conf + echo 'user-session=xfce' >> /etc/lightdm/lightdm.conf + + echo installing desktop packages: $pkglist + for pkg in $additional_desktop_packages_list; do + echo Installing $pkg ... + DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install $pkg || exit 1 + done + fi + # clean cached packages + apt-get clean + + + if [ $1 = arm64 ]; then + sysarch=aarch64-linux-gnu + elif [ $1 = armhf ]; then + sysarch=arm-linux-gnueabihf + fi + + + [ -f /usr/bin/sudo -a ! -u /usr/bin/sudo ] && chmod +s /usr/bin/sudo + [ -d /var/cache/man ] && chown -R man:root /var/cache/man + [ -d /var/lib/sddm ] && chown -R sddm:sddm /var/lib/sddm + + # some shared libraries locate in /lib/aarch64-linux-gnu(or /lib/arm-linux-gnueabihf) and /usr/local/lib + echo export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/$sysarch:/lib/$sysarch >> /etc/profile + + tmpusr=`ls -t /home | cut -d' ' -f1 | head -1` + [ -d /home/$tmpusr -a "$tmpusr" != "user" ] && rm -rf /home/$tmpusr + + test -c /dev/pts/ptmx && umount /dev/pts + test -f /proc/uptime && umount /proc + + echo APT Packages List: > /etc/packages.list + echo -e "Package\t Version\t Download-Size\t APT-Sources" >> /etc/packages.list + apt list --installed | cut -d/ -f1 | xargs apt show | \ + grep -E '^Package:|^APT-Sources:|^Version:|^Download-Size:' > packagelist + lnum=`wc -l packagelist |cut -d' ' -f1` + for((i=1; i<$lnum;)); do + t=$[ $i + 3 ] + sed -n "${i},${t}p" packagelist | grep -E 'Package:|APT-Sources:|Version:|Download-Size:' | \ + tr "\n" " " | cut -d' ' -f2,4,6,7,9,10 >> /etc/packages.list + i=$[ $i + 4 ] + done + rm -f packagelist +} + +do_distrorfs_second_stage $1 $2 $3 $4 $5 $6 +# end second stage installing