diff --git a/build.py b/build.py index fd73c6aab580dd4d345e0be160db037696d65f77..50a0972a8d4672d183192470db30f90a7ae3e87f 100644 --- a/build.py +++ b/build.py @@ -18,7 +18,7 @@ PARAMS = ['all', 'set_release_dir', 'update_release_info', 'build_and_wait', 'ma 'make_compile_env_storage', 'make_euleros_certdb', 'make_vm_qcow2', 'make_compile_tools', 'make_images_slim', 'make_tools_lib_storage', 'make_container_tools', 'make_tools_debug_tools', 'make_upgrade_patch', 'make_tools_dockertools', 'make_other_tools', 'upload_to_cmc', 'make_upload_cmc_image', 'make_iso_everything', - 'make_iso_everysrc', 'make_debug_everything', 'push_lts_dir', 'make_netinst_iso', 'get_epol_rpms', 'make_edge_iso', 'make_desktop_iso'] + 'make_iso_everysrc', 'make_debug_everything', 'push_lts_dir', 'make_netinst_iso', 'get_epol_rpms', 'make_edge_iso', 'make_desktop_iso', 'make_riscv64_qemu_image'] class Build(object): @@ -160,6 +160,7 @@ def usage(): print("* make_upgrade_patch *") print("* make_docker_image *") print("* make_raspi_image *") + print("* make_riscv64_qemu_image *") print("* make_container_tools *") print("* make_tools_othertools *") print("* make_tools_lib_storage *") diff --git a/script/common_function.sh b/script/common_function.sh index 98aa1f0717fdfdd4a751c7937fb49f2446453481..fc2dcc2e819cbb31c736985f07621c2b8aca6514 100644 --- a/script/common_function.sh +++ b/script/common_function.sh @@ -99,6 +99,8 @@ source "${BUILD_SCRIPT_DIR}"/step/release_dir.sh source "${BUILD_SCRIPT_DIR}"/step/make_docker_image.sh if [ "$STEP" == "make_raspi_image" ];then source "${BUILD_SCRIPT_DIR}"/step/make_raspi_image.sh +elif [ "$STEP" == "make_riscv64_qemu_image" ];then + source "${BUILD_SCRIPT_DIR}"/step/make_riscv64_qemu_image.sh else source "${BUILD_SCRIPT_DIR}"/step/make_microvm_image.sh fi diff --git a/script/config/riscv64_qemu_image/chroot.sh b/script/config/riscv64_qemu_image/chroot.sh new file mode 100755 index 0000000000000000000000000000000000000000..97dfee2ec697897697ae201fc22f87ed7cc638fc --- /dev/null +++ b/script/config/riscv64_qemu_image/chroot.sh @@ -0,0 +1,26 @@ +#!/bin/bash +systemctl enable sshd +systemctl enable NetworkManager +systemctl enable systemd-timesyncd +echo openeuler-riscv64 > /etc/hostname +echo "openEuler12#$" | passwd --stdin root +useradd -m -G wheel -s /bin/bash openeuler +echo "openeuler:openEuler12#$" | chpasswd +if [ -f /usr/share/zoneinfo/Asia/Shanghai ]; then + if [ -f /etc/localtime ]; then + rm -f /etc/localtime + fi + ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime +fi +if [ -f /etc/rc.d/rc.local ]; then + chmod +x /etc/rc.d/rc.local +fi +cd /etc/rc.d/init.d +chmod +x extend-root.sh +chkconfig --add extend-root.sh +chkconfig extend-root.sh on +cd - +if [ -f /etc/locale.conf ]; then + sed -i -e "s/^LANG/#LANG/" /etc/locale.conf +fi +localectl set-locale LANG=en_US.UTF-8 diff --git a/script/config/riscv64_qemu_image/extend-root.sh b/script/config/riscv64_qemu_image/extend-root.sh new file mode 100755 index 0000000000000000000000000000000000000000..f0b9e95496c7d88bb4511e32fed017afd3c38d82 --- /dev/null +++ b/script/config/riscv64_qemu_image/extend-root.sh @@ -0,0 +1,38 @@ +#!/bin/bash +# chkconfig: - 99 10 +# description: extend root + +set -e + +extend_root(){ + ROOT_PART="$(findmnt / -o source -n)" # /dev/vda2 + ROOT_DEV="/dev/$(lsblk -no pkname "$ROOT_PART")" # /dev/vda + PART_NUM="$(echo "$ROOT_PART" | grep -o "[[:digit:]]*$")" # 2 + + PART_INFO=$(parted "$ROOT_DEV" -ms unit s p) + # BYT; + # /dev/mmcblk0:31116288s:sd/mmc:512:512:msdos:SD SC16G:; + # 1:8192s:593919s:585728s:fat16::boot, lba; + # 2:593920s:1593343s:999424s:linux-swap(v1)::; + # 3:1593344s:31116287s:29522944s:ext4::; + LAST_PART_NUM=$(echo "$PART_INFO" | tail -n 1 | cut -f 1 -d:) # 2 + PART_START=$(echo "$PART_INFO" | grep "^${PART_NUM}" | cut -f 2 -d: | sed 's/[^0-9]//g') # 1593344 + PART_END=$(echo "$PART_INFO" | grep "^${PART_NUM}" | cut -f 3 -d: | sed 's/[^0-9]//g') # XXXX < 31116288 + ROOT_END=$(echo "$PART_INFO" | grep "^/dev"| cut -f 2 -d: | sed 's/[^0-9]//g') # 31116288 + ((ROOT_END--)) # 31116287 + + if [ $PART_END -lt $ROOT_END ]; then + parted -s $ROOT_DEV resizepart $ROOT_PART 100% + resize2fs $ROOT_PART + echo "Extend $ROOT_PART finished." >> /var/log/extend-root.log + else + echo "Already the largest! Do not need extend any more!" >> /var/log/extend-root.log + fi + return 0 +} + +if extend_root; then + rm -f /etc/rc.d/init.d/extend-root.sh +else + echo "Fail to root!" >> /var/log/extend-root.log +fi diff --git a/script/config/riscv64_qemu_image/extlinux.conf b/script/config/riscv64_qemu_image/extlinux.conf new file mode 100644 index 0000000000000000000000000000000000000000..c5c03f32aa160ab03626ddc6999f88796dcbbb6e --- /dev/null +++ b/script/config/riscv64_qemu_image/extlinux.conf @@ -0,0 +1,4 @@ +default openEuler-RISC-V +label openEuler-RISC-V + kernel /vmlinuz-openEuler + append 'root=/dev/vda2 rw console=ttyS0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl' \ No newline at end of file diff --git a/script/config/riscv64_qemu_image/rpmlist b/script/config/riscv64_qemu_image/rpmlist new file mode 100644 index 0000000000000000000000000000000000000000..15e8e7fdfe706c6e097bdafa9e79bf7b5ee70c6b --- /dev/null +++ b/script/config/riscv64_qemu_image/rpmlist @@ -0,0 +1,1133 @@ +CUnit +GConf2 +GeoIP +GeoIP-GeoLite-data +ModemManager +NetworkManager +ORBit2 +OpenIPMI +PackageKit +SDL +SDL2 +Xaw3d +abattis-cantarell-fonts +abseil-cpp +accountsservice +acl +acpid +adcli +adobe-mappings-cmap +adobe-mappings-pdf +adwaita-icon-theme +aide +alsa-firmware +alsa-lib +alsa-tools +amanda +apr +apr-util +argon2 +arptables +arpwatch +asciidoc +at +at-spi2-atk +at-spi2-core +atk +attr +atune +audiofile +audit +augeas +authd +authselect +autoconf +autogen +automake +avahi +babel +babeltrace +basesystem +bash +bash-completion +bc +bind +bind-dyndb-ldap +binutils +bison +blktrace +bluez +bolt +boost +bpg-dejavu-sans-fonts +bridge-utils +brltty +brotli +btrfs-progs +bubblewrap +busybox +byacc +bzip2 +c-ares +ca-certificates +cachefilesd +cairo +ccid +cdparanoia +cdrkit +cgdcbxd +check +checkpolicy +cheese +chkconfig +chrony +chrpath +cifs-utils +cjkuni-ukai-fonts +cloud-init +clutter +clutter-gst3 +clutter-gtk +cmake +cogl +color-filesystem +colord +colord-gtk +container-selinux +containernetworking-plugins +convmv +copy-jdk-configs +coreutils +cpio +cracklib +crash +crash-gcore-command +crash-trace-command +createrepo_c +cronie +crontabs +crypto-policies +cryptsetup +ctags +cups +cups-filters +cups-pk-helper +curl +cvs +cyrus-sasl +dbus +dbus-glib +dbus-python +dbxtool +dconf +dconf-editor +dejavu-fonts +desktop-file-utils +dhcp +dialog +diffstat +diffutils +ding-libs +djvulibre +dkms +dmidecode +dmraid +dnf +dnf-plugins-core +dnsmasq +docbook-dtds +docbook-style-xsl +docker +dos2unix +dosfstools +dracut +dropwatch +drpm +dtc +e2fsprogs +ebtables +ed +efi-srpm-macros +efivar +elfutils +emacs +enchant +enchant2 +environment-modules +eog +esc +ethtool +exempi +exiv2 +expat +expect +fakeroot +fcoe-utils +fftw +file +file-roller +filesystem +findutils +fio +fipscheck +firewalld +flac +flatpak +flex +fltk +fontawesome-fonts +fontconfig +fonts-rpm-macros +fprintd +freeglut +freeradius +freerdp +freetype +fribidi +fros +ftp +fuse +fuse3 +fxload +gawk +gc +gcc +gcr +gd +gdb +gdbm +gdisk +gdk-pixbuf2 +geoclue2 +geocode-glib +gettext +gflags +gfs2-utils +ghostscript +giflib +git +gjs +gl-manpages +glew +glib-networking +glib2 +glibc +glusterfs +gmp +gnu-free-serif-fonts +gnupg2 +gnutls +gobject-introspection +golang +google-droid-sans-fonts +google-noto-cjk-fonts +google-noto-emoji-fonts +gperftools +gpgme +gpm +graphene +graphite2 +graphviz +grep +grilo +groff +grpc +grub2 +grubby +gsettings-desktop-schemas +gsl +gsm +gsound +gspell +gssdp +gssproxy +gstreamer1 +gstreamer1-plugins-base +gtk2 +gtk3 +gubbi-fonts +guile +gupnp +gv +gzip +harfbuzz +haveged +hdf5 +hdparm +hicolor-icon-theme +hostname +http-parser +httpd +hunspell +hunspell-en +hwdata +hwinfo +hwloc +hyphen +i2c-tools +ibus +ibus-sayura +ibus-table +ibus-table-array30 +icu +iio-sensor-proxy +ima-evm-utils +initscripts +intltool +iotop +ipcalc +iperf3 +ipmitool +iproute +iprutils +ipset +iptables +iptraf-ng +iptstate +iputils +ipvsadm +irqbalance +iso-codes +isomd5sum +ivtv-firmware +iw +jansson +jbig2dec +jbigkit +jimtcl +jomolhari-fonts +jose +json-c +json-glib +jsoncpp +julietaula-montserrat-fonts +kacst-fonts +kbd +keepalived +kernel +keybinder3 +keyutils +kiwi +kmod +kmod-kvdo +krb5 +kurdit-unikurd-web-fonts +langtable +lapack +lato-fonts +lcms2 +ldns +less +lftp +lib-shim-v2 +libICE +libIDL +libSM +libX11 +libXau +libXaw +libXcomposite +libXcursor +libXdamage +libXdmcp +libXext +libXfixes +libXfont2 +libXft +libXi +libXinerama +libXmu +libXpm +libXrandr +libXrender +libXres +libXt +libXtst +libXv +libXvMC +libXxf86dga +libXxf86vm +libaec +libaio +libappstream-glib +libarchive +libart_lgpl +libassuan +libasyncns +libatasmart +libblockdev +libbonobo +libburn +libbytesize +libcanberra +libcap +libcap-ng +libcdio +libcdio-paranoia +libcgroup +libcomps +libconfig +libdaemon +libdatrie +libdazzle +libdb +libdbi +libdmx +libdnet +libdnf +libdrm +libdvdread +libecap +libedit +libepoxy +liberation-fonts +libesmtp +libestr +libev +libevdev +libevent +libevhtp +libexif +libfastjson +libffi +libfontenc +libfprint +libgcrypt +libgee +libgexiv2 +libglade2 +libglvnd +libgmem +libgpg-error +libgphoto2 +libgsf +libgtop2 +libgudev +libgusb +libgweather +libgxps +libhandy +libhugetlbfs +libical +libidn +libidn2 +libieee1284 +libijs +libimagequant +libimobiledevice +libinput +libiptcdata +libiscsi +libisoburn +libisofs +libjpeg-turbo +libkcapi +libksba +libldb +libmaxminddb +libmbim +libmediaart +libmemcached +libmetalink +libmicrohttpd +libmng +libmnl +libmodulemd +libmpc +libmspack +libmtp +libndp +libnet +libnetfilter_conntrack +libnetfilter_queue +libnfnetlink +libnftnl +libnl3 +libnma +libnotify +libnsl2 +liboauth +libogg +libosinfo +libpaper +libpcap +libpciaccess +libpeas +libpfm +libpipeline +libplist +libpng +libpq +libproxy +libpsl +libpwquality +libqmi +libquvi +libquvi-scripts +librelp +librepo +libreport +libreswan +librsvg2 +libsamplerate +libseccomp +libsecret +libselinux +libsemanage +libsepol +libserf +libsexy +libsigsegv +libsndfile +libsolv +libsoup +libspectre +libssh +libssh2 +libstemmer +libtalloc +libtar +libtasn1 +libteam +libtevent +libthai +libtheora +libtiff +libtirpc +libtomcrypt +libtommath +libtool +libunistring +libunwind +libusb +libusbmuxd +libusbx +libuser +libutempter +libuv +libverto +libvisual +libvorbis +libwacom +libwebp +libwebsockets +libwnck3 +libwpe +libx86emu +libxcb +libxcrypt +libxkbcommon +libxkbfile +libxklavier +libxml2 +libxshmfence +libxslt +libyaml +linux-firmware +linuxconsoletools +lksctp-tools +lldpad +llvm +lm_sensors +lmdb +lockdev +logrotate +lorax +low-memory-monitor +lrzsz +lshw +lsof +lsscsi +ltrace +lttng-ust +lua +lua-expat +lua-json +lua-lpeg +lua-posix +lua-socket +luksmeta +lvm2 +lxc +lxcfs +lz4 +lzo +lzop +m4 +madan-fonts +mailcap +mailx +make +man-db +man-pages +mariadb +mariadb-connector-c +mc +mcpp +mcstrans +mdadm +memcached +mercurial +mesa-demos +mesa-libGL +mesa-libGLU +metacity +minicom +mksh +mlocate +mobile-broadband-provider-info +mod_fcgid +mod_http2 +mod_security +mokutil +mozilla-filesystem +mpfr +mstflint +mtdev +mtools +mtr +mtx +multipath-tools +nafees-web-naskh-fonts +nano +navilu-fonts +ncompress +ncurses +ndctl +ndisc6 +net-snmp +net-tools +netcf +nettle +network-manager-applet +newt +nfs-utils +nfs4-acl-tools +nftables +nghttp2 +nmap +notification-daemon +npth +nspr +nss +nss-mdns +nss-pam-ldapd +nss-pem +nss_nis +ntpstat +numactl +numad +oddjob +open-iscsi +open-isns +openEuler-indexhtml +openEuler-latest-release +openEuler-logos +openEuler-release +openEuler-repos +openEuler-rpm-config +openblas +openjpeg2 +openldap +opensc +openscap +openslp +opensm +openssh +openssl +openssl-pkcs11 +openvpn +openvswitch +openwsman +opus +orc +os-prober +osinfo-db +osinfo-db-tools +ostree +overpass-fonts +p11-kit +paktype-naqsh-fonts +paktype-naskh-basic-fonts +paktype-tehreer-fonts +pam +pango +papi +paratype-pt-sans-fonts +parted +passwd +patch +patchutils +pbzip2 +pciutils +pcp +pcre +pcre2 +pcsc-lite +perftest +perl +perl-Algorithm-Diff +perl-Archive-Tar +perl-B-Debug +perl-CPAN-Meta +perl-CPAN-Meta-Requirements +perl-CPAN-Meta-YAML +perl-Carp +perl-Compress-Raw-Bzip2 +perl-Compress-Raw-Zlib +perl-Config-Perl-V +perl-DBD-MariaDB +perl-DBD-MySQL +perl-DBD-SQLite +perl-DBI +perl-Data-Dump +perl-Data-Dumper +perl-Devel-PPPort +perl-Digest +perl-Digest-HMAC +perl-Digest-MD5 +perl-Digest-SHA +perl-Encode +perl-Encode-Locale +perl-Env +perl-Error +perl-Exporter +perl-Exporter-Tiny +perl-ExtUtils-Install +perl-ExtUtils-MakeMaker +perl-ExtUtils-Manifest +perl-ExtUtils-ParseXS +perl-Fedora-VSP +perl-File-Fetch +perl-File-HomeDir +perl-File-Listing +perl-File-Path +perl-File-Temp +perl-File-Which +perl-Filter +perl-Filter-Simple +perl-Getopt-Long +perl-HTML-Parser +perl-HTML-Tagset +perl-HTTP-Cookies +perl-HTTP-Date +perl-HTTP-Message +perl-HTTP-Negotiate +perl-HTTP-Tiny +perl-IO-Compress +perl-IO-HTML +perl-IO-Socket-IP +perl-IO-Socket-SSL +perl-IPC-Cmd +perl-IPC-SysV +perl-IPC-System-Simple +perl-JSON +perl-JSON-PP +perl-LWP-MediaTypes +perl-List-MoreUtils +perl-List-MoreUtils-XS +perl-Locale-Codes +perl-Locale-Maketext +perl-MIME-Base64 +perl-Math-BigInt +perl-Math-BigInt-FastCalc +perl-Math-BigRat +perl-Module-CoreList +perl-Module-Load +perl-Module-Load-Conditional +perl-Module-Metadata +perl-Mozilla-CA +perl-NTLM +perl-Net-HTTP +perl-Net-SSLeay +perl-Params-Check +perl-PathTools +perl-Perl-OSType +perl-PerlIO-via-QuotedPrint +perl-Pod-Checker +perl-Pod-Escapes +perl-Pod-Parser +perl-Pod-Perldoc +perl-Pod-Simple +perl-Pod-Usage +perl-Scalar-List-Utils +perl-Socket +perl-Storable +perl-Sys-Syslog +perl-Term-ANSIColor +perl-Term-Cap +perl-TermReadKey +perl-Test-Harness +perl-Test-Simple +perl-Text-Balanced +perl-Text-Diff +perl-Text-ParseWords +perl-Text-Tabs+Wrap +perl-Text-Unidecode +perl-Thread-Queue +perl-Time-HiRes +perl-Time-Local +perl-TimeDate +perl-Try-Tiny +perl-URI +perl-Unicode-Collate +perl-Unicode-Normalize +perl-WWW-RobotRules +perl-XML-NamespaceSupport +perl-XML-Parser +perl-XML-SAX +perl-XML-SAX-Base +perl-XML-Simple +perl-XML-Writer +perl-XML-XPath +perl-autodie +perl-bignum +perl-constant +perl-experimental +perl-generators +perl-libnet +perl-libwww-perl +perl-parent +perl-perlfaq +perl-podlators +perl-threads +perl-threads-shared +perl-version +pesign +pigz +pinentry +pinfo +pixman +pkcs11-helper +pkgconf +plymouth +pngquant +policycoreutils +polkit +polkit-pkla-compat +poppler +poppler-data +popt +postfix +powertop +ppp +procmail +procps-ng +protobuf +protobuf-c +psacct +psmisc +publicsuffix-list +pulseaudio +pykickstart +pytest +python-IPy +python-aniso8601 +python-apipkg +python-argcomplete +python-asn1crypto +python-attrs +python-beaker +python-cffi +python-chardet +python-click +python-configobj +python-cryptography +python-dasbus +python-dateutil +python-decorator +python-dict2xml +python-distro +python-execnet +python-flask +python-flask-restful +python-hypothesis +python-idna +python-iniconfig +python-iniparse +python-inotify +python-itsdangerous +python-jinja2 +python-joblib +python-jsonpatch +python-jsonpointer +python-jsonschema +python-jwt +python-linux-procfs +python-lxml +python-mako +python-markupsafe +python-meh +python-ntplib +python-oauthlib +python-packaging +python-pandas +python-paste +python-pid +python-pip +python-pluggy +python-ply +python-prettytable +python-py +python-pyaml +python-pycdlib +python-pycparser +python-pycurl +python-pydbus +python-pyrsistent +python-pysocks +python-pytest-forked +python-pytest-xdist +python-pyudev +python-requests +python-requests-file +python-requests-ftp +python-responses +python-rtslib +python-schedutils +python-scikit-learn +python-scikit-optimize +python-setuptools +python-simpleline +python-six +python-sortedcontainers +python-systemd +python-tempita +python-threadpoolctl +python-toml +python-urlgrabber +python-xgboost +python3 +python3-cairo +python3-dmidecode +python3-gobject +python3-kmod +python3-ordered-set +python3-productmd +python3-pyOpenSSL +python3-pyatspi +python3-pyparsing +python3-pyserial +python3-pytz +python3-pyxattr +python3-pyyaml +python3-rpm-generators +python3-scipy +python3-slip +python3-urllib3 +qemu +qpdf +qperf +qrencode +qt5 +qt5-qtbase +qt5-qtdoc +qt5-qttranslations +quota +radvd +rarian +rasdaemon +rdate +rdma-core +re2 +readline +realmd +recode +rest +rhash +rootfiles +rpcbind +rpm +rpmdevtools +rpmlint +rpmrebuild +rrdtool +rsync +rsyslog +rtkit +ruby +saab-fonts +samba +samyak-fonts-common +sane-backends +sanlock +satyr +sbc +sblim-sfcc +scap-security-guide +screen +sdparm +security-tool +sed +selinux-policy +sendmail +setools +setserial +setup +sg3_utils +sgml-common +sgpio +shadow +shared-mime-info +sharutils +sil-abyssinica-fonts +sil-nuosu-fonts +sil-padauk-fonts +sil-scheherazade-fonts +skopeo +slang +smartmontools +smc-fonts +smp_utils +snappy +softhsm +sound-theme-freedesktop +source-highlight +speex +speexdsp +spice-server +spice-vdagent +sqlite +squashfs-tools +squid +sssd +startup-notification +stix-fonts +strace +strongswan +subunit +subversion +sudo +switcheroo-control +symlinks +sysfsutils +sysprof +sysstat +systemd +systemtap +taglib +tang +tar +tbb +tcl +tcp_wrappers +tcpdump +tcsh +telepathy-filesystem +telepathy-glib +telepathy-logger +telnet +texinfo +texlive-scheme-basic +tftp +thai-scalable-fonts +thin-provisioning-tools +tibetan-machine-uni-fonts +tigervnc +time +timedatex +tipcutils +tk +tmux +tog-pegasus +tokyocabinet +totem-pl-parser +tpm-quote-tools +tpm-tools +tpm2-abrmd +tpm2-tools +tpm2-tss +trace-cmd +traceroute +tracker3 +tracker3-miners +tree +trousers +tuned +tzdata +udisks2 +unbound +units +unixODBC +unzip +upower +urw-base35-fonts +usb_modeswitch +usb_modeswitch-data +usbmuxd +usbredir +usbutils +usermode +userspace-rcu +ustr +utf8proc +util-linux +v4l-utils +vdo +vim +vino +virglrenderer +virt-what +volume_key +vsftpd +vte291 +vulkan-loader +wayland +wayland-protocols-devel +webkit2gtk3 +webrtc-audio-processing +wget +which +woff2 +words +wpa_supplicant +wpebackend-fdo +wqy-microhei-fonts +wqy-zenhei-fonts +x3270 +xcb-util +xdelta +xdg-dbus-proxy +xdg-user-dirs +xdg-user-dirs-gtk +xdg-utils +xfsdump +xfsprogs +xinetd +xkeyboard-config +xmlrpc-c +xmlsec1 +xmlto +xorg-x11-drivers +xorg-x11-drv-ati +xorg-x11-drv-dummy +xorg-x11-drv-evdev +xorg-x11-drv-fbdev +xorg-x11-drv-libinput +xorg-x11-drv-nouveau +xorg-x11-drv-v4l +xorg-x11-drv-wacom +xorg-x11-font-utils +xorg-x11-fonts +xorg-x11-proto-devel +xorg-x11-server +xorg-x11-server-utils +xorg-x11-utils +xorg-x11-xauth +xorg-x11-xinit +xorg-x11-xkb-utils +xrestop +xterm +xvattr +xz +yajl +yelp +yelp-xsl +yp-tools +ypbind +ypserv +zenity +zip +zlib +zstd +zziplib diff --git a/script/config/riscv64_qemu_image/shadow.template b/script/config/riscv64_qemu_image/shadow.template new file mode 100644 index 0000000000000000000000000000000000000000..b504cef35dba25ae5621aa6f590aefa60f162046 --- /dev/null +++ b/script/config/riscv64_qemu_image/shadow.template @@ -0,0 +1,21 @@ +root:$6$MznPTm975Bnsg/dt$c1KaR1SlMGkz.Sue7LPkCeK8YOz0Nk1DSAXhoSqkDDjmBqrNo3N9tVWu4izrct53r3I0KauFlWVAPM.dfF9Yr/:19451:0:99999:7::: +bin:*:19564:0:99999:7::: +daemon:*:19564:0:99999:7::: +adm:*:19564:0:99999:7::: +lp:*:19564:0:99999:7::: +sync:*:19564:0:99999:7::: +shutdown:*:19564:0:99999:7::: +halt:*:19564:0:99999:7::: +mail:*:19564:0:99999:7::: +operator:*:19564:0:99999:7::: +games:*:19564:0:99999:7::: +ftp:*:19564:0:99999:7::: +nobody:*:19564:0:99999:7::: +systemd-coredump:!:19566:::::: +unbound:!:19566:::::: +sshd:!:19566:::::: +dbus:!:19566:::::: +tss:!:19566:::::: +systemd-network:!*:19566:::::: +systemd-resolve:!*:19566:::::: +systemd-timesync:!*:19566:::::: \ No newline at end of file diff --git a/script/make_version.sh b/script/make_version.sh index b28d8591847ba9a6b4e85a56a120d32db79400dd..ca0c1c29e2245db2ab5d1bf7da535ef28915226f 100644 --- a/script/make_version.sh +++ b/script/make_version.sh @@ -50,7 +50,7 @@ function usage() echo "$(basename $0) [script_name|all]" } -export ALL_SCRIPT=('build_and_wait' 'update_release_info' 'make_tar' 'make_hmi' 'make_iso' 'make_iso_debug' 'make_iso_singleoss' 'make_livecd' 'make_compile_env' 'make_docker_image' 'make_raspi_image' 'make_microvm_image' 'make_euleros_certdb' 'make_tools_lib_storage' 'make_container_tools' 'make_tools_debug_tools' 'make_upgrade_patch' 'make_iso_everything' 'make_iso_everysrc' 'make_debug_everything' 'push_lts_dir' 'make_netinst_iso' 'get_epol_rpms' 'make_edge_iso' 'make_desktop_iso') +export ALL_SCRIPT=('build_and_wait' 'update_release_info' 'make_tar' 'make_hmi' 'make_iso' 'make_iso_debug' 'make_iso_singleoss' 'make_livecd' 'make_compile_env' 'make_docker_image' 'make_raspi_image' 'make_riscv64_qemu_image' 'make_microvm_image' 'make_euleros_certdb' 'make_tools_lib_storage' 'make_container_tools' 'make_tools_debug_tools' 'make_upgrade_patch' 'make_iso_everything' 'make_iso_everysrc' 'make_debug_everything' 'push_lts_dir' 'make_netinst_iso' 'get_epol_rpms' 'make_edge_iso' 'make_desktop_iso') [[ "${DEBUG}" -eq 1 ]] && set -x #check_env diff --git a/script/setup_env.sh b/script/setup_env.sh index c7a5c8d97735b8858de58e182a91ea6308f61321..278682ce2263127e321b02116dc5d32601e70058 100644 --- a/script/setup_env.sh +++ b/script/setup_env.sh @@ -50,6 +50,7 @@ export RELEASE_ARCH_DIR="openEuler_${ARCH}" export CONTAINER_NAME=$(echo ${RELEASE_VERSION_DIR} | tr A-Z a-z) export VM_IMAGE_NAME="${RELEASE_VERSION_DIR}-${ARCH}.qcow2" export RASPI_IMAGE_NAME="${RELEASE_VERSION_DIR}-raspi-${ARCH}.img" +export RISCV64_QEMU_IMAGE_NAME="${RELEASE_VERSION_DIR}-qemu-${ARCH}.qcow2" export MICROVM_IMAGE_NAME="${RELEASE_VERSION_DIR}-stratovirt-${ARCH}.img" export MICROVM_KERNEL_NAME="vmlinux.bin" export STDANDARD_VM_KERNEL_NAME="std-vmlinux" diff --git a/script/step/make_riscv64_qemu_image.sh b/script/step/make_riscv64_qemu_image.sh new file mode 100644 index 0000000000000000000000000000000000000000..d20d37bbff864764f98103354cee3115f66b375f --- /dev/null +++ b/script/step/make_riscv64_qemu_image.sh @@ -0,0 +1,316 @@ +#!/bin/bash +set -x +set -e + +if [ ! -d "${OUTPUT_PATH}" ]; then + mkdir -p "${OUTPUT_PATH}" +fi + +set -e +export OPENEULER_CHROOT_PATH="/usr1/openeuler" +yum_conf="/home/config/repo_conf/obs-repo.conf" +chroot_rpm_get_path="${BUILD_SCRIPT_DIR}/oE_Chroot_RPM" +hw_arch="$(uname -m)" +IMAGE_SIZE_MB=16384 + +ERROR() +{ + echo `date` - ERROR, $* | tee -a ${log_dir}/${builddate}.log +} + +LOG() +{ + echo `date` - INFO, $* | tee -a ${log_dir}/${builddate}.log +} + +UMOUNT_ALL() +{ + set +e + echo "UMOUNT UMOUNT UMOUNT " + if grep -q "${rootfs_dir}/dev " /proc/mounts ; then + umount -l ${rootfs_dir}/dev + fi + if grep -q "${rootfs_dir}/proc " /proc/mounts ; then + umount -l ${rootfs_dir}/proc + fi + if grep -q "${rootfs_dir}/sys " /proc/mounts ; then + umount -l ${rootfs_dir}/sys + fi + set -e +} + +LOSETUP_D_IMG() +{ + set +e + if [ -d ${root_mnt} ]; then + if grep -q "${root_mnt} " /proc/mounts ; then + umount ${root_mnt} + fi + fi + if [ -d ${boot_mnt} ]; then + if grep -q "${boot_mnt} " /proc/mounts ; then + umount ${boot_mnt} + fi + fi + if [ "x$device" != "x" ]; then + kpartx -d ${device} + losetup -d ${device} + device="" + fi + if [ -d ${root_mnt} ]; then + rm -rf ${root_mnt} + fi + if [ -d ${boot_mnt} ]; then + rm -rf ${boot_mnt} + fi + set -e +} + +INSTALL_PACKAGES() +{ + for item in $(cat $1) + do + yum --installroot=${rootfs_dir}/ install -y $item -c "${yum_conf}" + if [ $? == 0 ]; then + LOG install $item. + else + ERROR can not install $item. + fi + done +} + +prepare() +{ + if [ ! -d ${tmp_dir} ]; then + mkdir -p ${tmp_dir} + else + rm -rf ${tmp_dir}/* + fi + + img_file=${img_dir}/${RISCV64_QEMU_IMAGE_NAME} + RAW_IMAGE_FILE=${img_file}.img + + if [ ! -d ${log_dir} ]; then + mkdir -p ${log_dir} + fi + LOG "prepare begin..." + yum clean all -c "${yum_conf}" + yum makecache -c "${yum_conf}" + + if [ -d ${rootfs_dir} ]; then + rm -rf ${rootfs_dir} + fi + if [ ! -d ${img_dir} ]; then + mkdir -p ${img_dir} + fi + + set +e + os_release_name=${OS_NAME}-release + set -e + LOG "prepare end." +} + +make_rootfs() +{ + LOG "make rootfs for ${yum_conf} begin..." + if [[ -d ${rootfs_dir} ]]; then + UMOUNT_ALL + rm -rf ${rootfs_dir} + fi + # setup directory structure for chroot environment + mkdir -p ${rootfs_dir} + mkdir -p ${rootfs_dir}/var/lib/rpm + rpm --root ${rootfs_dir} --initdb + mkdir -p ${rootfs_dir}/etc/rpm + chmod a+rX ${rootfs_dir}/etc/rpm + echo "%_install_langs en_US" > ${rootfs_dir}/etc/rpm/macros.image-language-conf + if [[ ! -d ${rootfs_dir}/etc/yum.repos.d ]]; then + mkdir -p ${rootfs_dir}/etc/yum.repos.d + fi + yum --installroot=${OPENEULER_CHROOT_PATH}/ install parted -y -c "${yum_conf}" + yum --installroot=${rootfs_dir}/ install ${os_release_name} -y -c "${yum_conf}" + set +e + INSTALL_PACKAGES $CONFIG_RPM_LIST + cat ${rootfs_dir}/etc/systemd/timesyncd.conf | grep "^NTP=*" + if [ $? -ne 0 ]; then + sed -i -e '/^#NTP=/cNTP=0.cn.pool.ntp.org' ${rootfs_dir}/etc/systemd/timesyncd.conf + sed -i 's/#FallbackNTP=/FallbackNTP=1.asia.pool.ntp.org 2.asia.pool.ntp.org /g' ${rootfs_dir}/etc/systemd/timesyncd.conf + fi + set -e + # Run in chroot + cp ${genimg_conf_dir}/chroot.sh ${rootfs_dir}/chroot.sh + chmod +x ${rootfs_dir}/chroot.sh + if [ ! -d ${rootfs_dir}/etc/rc.d/init.d ]; then + mkdir -p ${rootfs_dir}/etc/rc.d/init.d + fi + cp ${genimg_conf_dir}/extend-root.sh ${rootfs_dir}/etc/rc.d/init.d/extend-root.sh + # mount for in-chroot testing + mount --bind /dev ${rootfs_dir}/dev + mount -t proc /proc ${rootfs_dir}/proc + mount -t sysfs /sys ${rootfs_dir}/sys + set +e + chroot ${rootfs_dir} /bin/bash -c "echo 'Y' | /chroot.sh" + UMOUNT_ALL + set -e + # REMINDER: remove the Non-RISC-V openEuler.repo installed by openEuler-repo + rm ${rootfs_dir}/etc/yum.repos.d/openEuler.repo + rm ${rootfs_dir}/chroot.sh + LOG "make rootfs for ${yum_conf} end." +} + +make_img() +{ + LOG "make ${img_file} begin..." + device="" + LOSETUP_D_IMG + losetup -D + pwd + yum install dosfstools parted rsync qemu-img -y -c "${yum_conf}" + # Create empty image + dd if=/dev/zero of=${RAW_IMAGE_FILE} bs=1MiB count=$IMAGE_SIZE_MB && sync + + # Partitioning + parted ${RAW_IMAGE_FILE} mklabel gpt + parted ${RAW_IMAGE_FILE} mkpart primary fat32 1M 513M + parted ${RAW_IMAGE_FILE} -s set 1 boot + parted ${RAW_IMAGE_FILE} -s set 1 esp on + parted ${RAW_IMAGE_FILE} mkpart primary ext4 513M 100% + device=`losetup -f --show -P ${RAW_IMAGE_FILE}` + LOG "after losetup: ${device}" + trap 'LOSETUP_D_IMG' EXIT + LOG "image ${RAW_IMAGE_FILE} created and mounted as ${device}" + # loopX=`kpartx -va ${device} | sed -E 's/.*(loop[0-9])p.*/\1/g' | head -1` + # LOG "after kpartx: ${loopX}" + kpartx -va ${device} + loopX=${device##*\/} + partprobe ${device} + bootp=/dev/mapper/${loopX}p1 + rootp=/dev/mapper/${loopX}p2 + LOG "bootp: " ${bootp} "rootp: " ${rootp} + + # Creating filesystem and mounting + mkfs.vfat -n boot ${bootp} + mkfs.ext4 ${rootp} + mkdir -p ${root_mnt} ${boot_mnt} + mount -t vfat -o uid=root,gid=root,umask=0000 ${bootp} ${boot_mnt} + mount -t ext4 ${rootp} ${root_mnt} + + # Generating fstab + prefix_len=${#loopX} + ### *hardcoded logic?* ### + let prefix_len=prefix_len+13 + fstab_array=("" "" "" "") + for line in `blkid | grep /dev/mapper/${loopX}p` + do + partuuid=${line#*PARTUUID=\"} + fstab_array[${line:$prefix_len:1}]=${partuuid%%\"*} + done + echo "PARTUUID=${fstab_array[2]} / ext4 defaults,noatime 0 0" > ${rootfs_dir}/etc/fstab + echo "PARTUUID=${fstab_array[1]} /boot vfat defaults,noatime 0 0" >> ${rootfs_dir}/etc/fstab + + # locale + cat ${rootfs_dir}/usr/share/zoneinfo/Asia/Shanghai > ${rootfs_dir}/etc/localtime + # root password + cat /home/config/riscv64_qemu_image/shadow.template > ${rootfs_dir}/etc/shadow + # hostname + echo openeuler > ${rootfs_dir}/etc/hostname + + # Copying extlinux.conf, add a workaround for persistent kernel naming + mkdir -p ${rootfs_dir}/boot/extlinux/ + cp ${genimg_conf_dir}/extlinux.conf ${rootfs_dir}/boot/extlinux/ + for item in $(ls ${rootfs_dir}/boot/vmlinuz*); do + cp $item ${rootfs_dir}/boot/vmlinuz-openEuler; + done + cp -a ${rootfs_dir}/boot/* ${boot_mnt}/ + + rm -rf ${rootfs_dir}/boot + rsync -avHAXq ${rootfs_dir}/* ${root_mnt} + sync + sleep 10 + LOSETUP_D_IMG + rm -rf ${rootfs_dir} + losetup -D + pushd ${img_dir} + # Convert raw .img file to qcow2 file we actually want + if [ -f ${RAW_IMAGE_FILE} ]; then + qemu-img convert -f raw -O qcow2 ${RAW_IMAGE_FILE} ${img_file} + else + echo ":: NO img file here. make_img FAILED" + return 1 + fi + if [ -f ${img_file} ]; then + sha256sum $(basename ${img_file}) > ${img_file}.sha256sum + xz -T 20 -z -c ${img_file} > ${img_file}.xz + sha256sum $(basename ${img_file}.xz) > ${img_file}.xz.sha256sum + LOG "made sum files for ${img_file}" + else + echo ":: NO converted qcow2 file here. make_img FAILED" + return 1 + fi + popd + LOG "write ${img_file} done." + LOG "make ${img_file} end." + sshscp "${img_file} ${img_file}.sha256sum ${img_file}.xz ${img_file}.xz.sha256sum " "${RELEASE_DIR}" +} + +function make_riscv64_qemu_image() +{ + chroot_run "cd /home; bash -x make_version.sh make_riscv64_qemu_image_inchroot" +} + +function make_riscv64_qemu_image_inchroot() +{ + echo 'make riscv64 qemu image' + if [ "$EUID" -ne 0 ]; then + echo `date` - ERROR, Please run as root! + exit + fi + + OS_NAME=openEuler + + workdir=$(cd $(dirname $0);pwd) + if [ "x${workdir}" == "x/" ]; then + workdir=/rv64_qemu_output + else + workdir=${workdir}/rv64_qemu_output + fi + + tmp_dir=${workdir}/tmp + log_dir=${workdir}/log + rootfs_dir=${workdir}/rootfs + root_mnt=${workdir}/root + boot_mnt=${workdir}/boot + genimg_conf_dir=/home/config/riscv64_qemu_image + CONFIG_RPM_LIST=${genimg_conf_dir}/rpmlist + + builddate=$(date +%Y%m%d) + get_version + release_dir=$(get_release_dir) + version_time="${release_dir#${HTTP_DIR}}" + version_time=${version_time##*/} + repo_dir="${WORK_DIR}repository" + img_dir="${WORK_DIR}image" + cfg_dir="${WORK_DIR}config" + if [ -d "${img_dir}" ]; then + rm -rf "${img_dir}" + fi + mkdir -p "${img_dir}" + if [ -d "${repo_dir}" ]; then + rm -rf "${repo_dir}" + fi + mkdir -p "${repo_dir}" + if [ -d "${cfg_dir}" ]; then + rm -rf "${cfg_dir}" + fi + mkdir -p "${cfg_dir}" + RELEASE_DIR="${release_dir}/riscv64_qemu_img/" + SSH_CMD="mkdir -p ${RELEASE_DIR}" + sshcmd "${SSH_CMD}" + + trap 'UMOUNT_ALL' EXIT + UMOUNT_ALL + prepare + IFS=$'\n' + make_rootfs + make_img +} \ No newline at end of file