galeb

Једноставна статичка дистрибуција заснована на musl-у
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување bd7a869b524892a922f29cff6a45ce116365a9cc
родитељ ef41efe2ac22c6f3f61a107e26b8d8f80342618b
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Fri, 21 Apr 2023 21:31:42 +0200

* Use hwclock and mount from util-linux
* Add libnl and wpa_supplicant to /pkg/pkgdb.tsv
* Add (galeb-)mkinitramfs
* Add copying of firmware blobs to /lib/firmware
* Use tarball of svc instead of git clone
* Generate initramfs to /boot/initramfs.img
* Add support for initrd to fil/linux/config*-gl22

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
M02-chroot.sh | 2+-
M03-packages.sh | 66+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
M04-finale.sh | 21++++++++++++++++++---
M05-mkbootimage.sh | 13++++++++++---
Mfil/linux/config-20230417-gl22 | 59++++++++++++++++++++++++++++++++---------------------------
Mfil/rc.d/rc.init | 18+++++++++++-------
Mlib/env.sh | 18++++++++++++++++++
Mlib/pkgs.tsv | 1+
измењених датотека: 8, додавања: 152(+), брисања: 46(-)

diff --git a/02-chroot.sh b/02-chroot.sh @@ -120,7 +120,7 @@ cp_or_fail ${WD}/03-packages.sh ${GR}/bin/ cp_or_fail ${WD}/04-finale.sh ${GR}/bin/ check_dir ${G_LIB} cp_or_fail ${WD}/lib/env.sh ${GR}/lib/env.sh -/bin/sed -i 's,^\(GR=\).*,\1,' ${GR}/lib/env.sh +/bin/sed -i 's,^\(GR=\).*,\1'\'\'',' ${GR}/lib/env.sh cp_or_fail ${WD}/lib/fun.sh ${GR}/lib/fun.sh cp_or_fail ${WD}/${FLD}/rc.d/g_fun.sh ${GR}/lib/g_fun.sh cp_or_fail ${WD}/lib/createdirs ${GR}/lib/createdirs diff --git a/03-packages.sh b/03-packages.sh @@ -33,7 +33,7 @@ msg info "Creating symlinks" begin_step "packages" -totalsubsteps=135 +totalsubsteps=136 substep=1 msg info "Creating temporary links" @@ -1115,7 +1115,7 @@ gcc -dumpspecs | sed -e 's,/'${TLD}',,g' \ mv_or_fail specs ${SPECFILE} unset SPECFILE -PATH=/local/bin:/bin:/sucks/bin:/${TLD}/bin +PATH=/local/bin:/bin:/sucks/bin:/plan9/bin:/${TLD}/bin export PATH #for lib in gcc_s.so gcc_s.so.1 stdc++.a stdc++.so stdc++.so.6 @@ -5246,6 +5246,7 @@ mkpk_install() NOCONFIGURE=1 ./autogen.sh || exit 1 + #--disable-mount \\ ./configure \\ --prefix="\${PREFIX}" \\ ADJTIME_PATH=/var/lib/hwclock/adjtime \\ @@ -5254,13 +5255,11 @@ mkpk_install() --disable-chfn-chsh \\ --disable-eject \\ --disable-fallocate \\ - --disable-hwclock \\ --disable-kill \\ --disable-last \\ --disable-logger \\ --disable-login \\ --disable-mesg \\ - --disable-mount \\ --disable-mountpoint \\ --disable-nologin \\ --disable-pivot_root \\ @@ -7295,6 +7294,8 @@ mkpk_install() unpack_pkg ${pkg} / ) || exit 1 fi +timestamp=$(date +'%Y-%m-%d %T') +printf "%s\t%s\t%s\n" libnl 3.7.10 "${timestamp}" >>${G_PKGDB} end_substep begin_substep wpa_supplicant-2.10 @@ -7346,6 +7347,41 @@ mkpk_install() unpack_pkg ${pkg} / ) || exit 1 fi +timestamp=$(date +'%Y-%m-%d %T') +printf "%s\t%s\t%s\n" wpa_supplicant 2.10 "${timestamp}" >>${G_PKGDB} +end_substep + +begin_substep mkinitramfs-0.3 +if [ -x /bin/mkinitramfs ]; then + msg info "%s exists, skipping %s" /bin/mkinitramfs ${pkg} +elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then + unpack_pkg ${pkg} / +else + extract_pkg ${G_SRC} galeb-mkinitramfs-v0.3 ${pkg}.tar.gz ${pkg} + ( + cd_or_fail ${G_SRC}/${pkg} + cat <<! >MKPK +mkpk_name() +{ + printf "%s" "${pkg}" +} + +mkpk_install() +{ + FALLBACKVER=0.1 + DESTDIR=/build + export FALLBACKVER DESTDIR + + mk +} +! + mkpk ${pkg} + remove_dir ${G_SRC}/${pkg} + unpack_pkg ${pkg} / + ) || exit 1 +fi +timestamp=$(date +'%Y-%m-%d %T') +printf "%s\t%s\t%s\n" mkinitramfs 0.3 "${timestamp}" >>${G_PKGDB} end_substep end_step # packages @@ -7407,6 +7443,26 @@ begin_substep linux-6.2.10 remove_file ${G_SRC}/linux link_if_ne ${pkg} ${G_SRC}/linux cd_or_fail ${G_SRC}/${pkg} + + if [ -n "${INCLUDE_FIRMWARE}" ]; then + msg info "Cloning %s" \ + https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git + + git_clone linux-firmware \ + https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git \ + 1 + + link_if_ne linux-firmware ${G_SRC}/firmware + remove_dir ${GR}/lib/firmware + check_dir ${GR}/lib/firmware + + msg info "Copying firmware" + eval rsync -arv --numeric-ids \ + ${INCLUDE_FIRMWARE} \ + --exclude="*" \ + ${G_SRC}/firmware/ ${GR}/lib/firmware/ || exit 1 + fi + cp_or_fail ${G_FIL}/linux/config-20230417-gl22 .config HOSTLDLIBS=-lz export HOSTLDLIBS @@ -7424,7 +7480,7 @@ msg warn " mv /bin/_ln /bin/ln " msg warn "You might want to then use efibootmgr to add efistub to EFI. " msg warn "See BOOTING. " - PATH=/local/bin:/bin:/sucks/bin:/tools/bin + PATH=/local/bin:/bin:/sucks/bin:/plan9/bin:/tools/bin export PATH /bin/mksh -l +h diff --git a/04-finale.sh b/04-finale.sh @@ -229,6 +229,17 @@ mkpk_install() -e "s,^LDLIBS\\s\\+= ,&-lc ,g" config.mk fi + # - Use util-linux hwclock for now (supports more than UTC with no + # --systz) + # - Use mount from util-linux, as ubase mount doesn't seem to support + # ext4? TODO: More testing + if [ ! -e Makefile.orig ]; then + cp Makefile Makefile.orig + \${SED} -i -e '/^\\s\\+hwclock/d' \ + -e '/^\\s\\+mount/d' \ + Makefile + fi + make clean make ${JN} || exit 1 make DESTDIR=/build install @@ -249,12 +260,13 @@ timestamp=$(date +'%Y-%m-%d %T') printf "%s\t%s\t%s\n" ubase 20230412 "${timestamp}" >>${G_PKGDB} end_substep -begin_substep svc-20230417 +begin_substep svc-0.1 if [ -x /bin/svc ]; then msg info "%s exists, skipping %s" /bin/svc ${pkg} elif [ -e ${G_SPKG}/${pkg}.tar.xz ]; then unpack_pkg ${pkg} / else + extract_pkg ${G_SRC} svc-v0.1 ${pkg}.tar.gz ${pkg} ( cd_or_fail ${G_SRC}/${pkg} @@ -275,12 +287,12 @@ mkpk_install() } ! mkpk ${pkg} - #remove_dir ${G_SRC}/${pkg} + remove_dir ${G_SRC}/${pkg} unpack_pkg ${pkg} / ) || exit 1 fi timestamp=$(date +'%Y-%m-%d %T') -printf "%s\t%s\t%s\n" svc 20230417 "${timestamp}" >>${G_PKGDB} +printf "%s\t%s\t%s\n" svc 0.1 "${timestamp}" >>${G_PKGDB} end_substep begin_substep mkpk-0.1.10 @@ -335,6 +347,9 @@ cat <<! >/etc/galeb-release Galeb musl/Linux ${G_VER} ! +msg info "Generating initramfs" +mkinitramfs + msg warn "Create a partition and copy files from here to it, then setup booting" msg warn "(see BOOTING). " diff --git a/05-mkbootimage.sh b/05-mkbootimage.sh @@ -1,5 +1,10 @@ #!/bin/sh +if [ ! -e ./lib/env.sh ] || [ ! -e ./lib/fun.sh ]; then + printf "Nonexistant lib/env.sh or lib/fun.sh!\n" >&2 + exit 1 +fi + . ./lib/env.sh . ./lib/fun.sh @@ -41,12 +46,13 @@ PARTUUID=${BPUUID} /boot vfat rw,relatime,fmask=0133,dmask=0022,errors=remount-r msg info "Generating %s" "${GR}/boot/EFI/GALEB/BOOT.CSV" cat <<! >${GR}/boot/EFI/GALEB/BOOT-ASC.CSV -vmlinuz,Galeb USB,root=PARTUUID=${RPUUID} ro rootdelay=5,Boot entry for Galeb USB +vmlinuz,Galeb USB,initrd=\initramfs.img root=PARTUUID=${RPUUID} rw rootdelay=5,Boot entry for Galeb USB ! iconv -f ASCII -t UCS-2LE <${GR}/boot/EFI/GALEB/BOOT-ASC.CSV \ >${GR}/boot/EFI/GALEB/BOOT.CSV +msg info "Copying files" rsync -arv --numeric-ids \ --exclude='/cross-tools' \ --exclude='/src/*' \ @@ -54,11 +60,12 @@ rsync -arv --numeric-ids \ --exclude='/var/log/galeb' \ ${GR}/* /mnt/ || exit 1 +msg info "Umounting /mnt" umount /mnt/boot || exit 1 umount /mnt || exit 1 -e2fsck -p /dev/loop0p2 -fsck.fat -p /dev/loop0p1 +e2fsck -p /dev/loop0p2 || exit 1 +fsck.fat -p /dev/loop0p1 || exit 1 losetup -d /dev/loop0 || exit 1 xz -9vvf "${diskimg}" || exit 1 diff --git a/fil/linux/config-20230417-gl22 b/fil/linux/config-20230417-gl22 @@ -210,7 +210,15 @@ CONFIG_NET_NS=y # CONFIG_SCHED_AUTOGROUP is not set # CONFIG_SYSFS_DEPRECATED is not set CONFIG_RELAY=y -# CONFIG_BLK_DEV_INITRD is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +CONFIG_RD_XZ=y +# CONFIG_RD_LZO is not set +CONFIG_RD_LZ4=y +CONFIG_RD_ZSTD=y # CONFIG_BOOT_CONFIG is not set CONFIG_INITRAMFS_PRESERVE_MTIME=y CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y @@ -521,8 +529,8 @@ CONFIG_ACPI_PROCESSOR=y CONFIG_ACPI_HOTPLUG_CPU=y # CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set CONFIG_ACPI_THERMAL=y -CONFIG_ACPI_PLATFORM_PROFILE=y CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y +CONFIG_ACPI_TABLE_UPGRADE=y # CONFIG_ACPI_DEBUG is not set # CONFIG_ACPI_PCI_SLOT is not set CONFIG_ACPI_CONTAINER=y @@ -947,7 +955,6 @@ CONFIG_SECRETMEM=y # end of Memory Management options CONFIG_NET=y -CONFIG_COMPAT_NETLINK_MESSAGES=y CONFIG_NET_INGRESS=y CONFIG_NET_EGRESS=y CONFIG_SKB_EXTENSIONS=y @@ -1281,8 +1288,6 @@ CONFIG_NET_FLOW_LIMIT=y # CONFIG_MCTP is not set CONFIG_FIB_RULES=y CONFIG_WIRELESS=y -CONFIG_WEXT_CORE=y -CONFIG_WEXT_PROC=y CONFIG_CFG80211=y # CONFIG_NL80211_TESTMODE is not set # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set @@ -1291,13 +1296,13 @@ CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y CONFIG_CFG80211_DEFAULT_PS=y # CONFIG_CFG80211_DEBUGFS is not set CONFIG_CFG80211_CRDA_SUPPORT=y -CONFIG_CFG80211_WEXT=y +# CONFIG_CFG80211_WEXT is not set CONFIG_MAC80211=y CONFIG_MAC80211_HAS_RC=y CONFIG_MAC80211_RC_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" -CONFIG_MAC80211_MESH=y +# CONFIG_MAC80211_MESH is not set CONFIG_MAC80211_LEDS=y # CONFIG_MAC80211_DEBUGFS is not set # CONFIG_MAC80211_MESSAGE_TRACING is not set @@ -1427,9 +1432,12 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y # Firmware loader # CONFIG_FW_LOADER=y +CONFIG_FW_LOADER_PAGED_BUF=y CONFIG_EXTRA_FIRMWARE="" # CONFIG_FW_LOADER_USER_HELPER is not set -# CONFIG_FW_LOADER_COMPRESS is not set +CONFIG_FW_LOADER_COMPRESS=y +CONFIG_FW_LOADER_COMPRESS_XZ=y +CONFIG_FW_LOADER_COMPRESS_ZSTD=y CONFIG_FW_CACHE=y # CONFIG_FW_UPLOAD is not set # end of Firmware loader @@ -1579,7 +1587,7 @@ CONFIG_BLK_DEV_NVME=y # CONFIG_EEPROM_AT24 is not set # CONFIG_EEPROM_LEGACY is not set # CONFIG_EEPROM_MAX6875 is not set -CONFIG_EEPROM_93CX6=y +# CONFIG_EEPROM_93CX6 is not set # CONFIG_EEPROM_IDT_89HPESX is not set # CONFIG_EEPROM_EE1004 is not set # end of EEPROM support @@ -2181,41 +2189,35 @@ CONFIG_USB_NET_DRIVERS=y # CONFIG_USB_IPHETH is not set CONFIG_WLAN=y CONFIG_WLAN_VENDOR_ADMTEK=y -CONFIG_ADM8211=y +# CONFIG_ADM8211 is not set CONFIG_ATH_COMMON=y CONFIG_WLAN_VENDOR_ATH=y # CONFIG_ATH_DEBUG is not set -CONFIG_ATH5K=y -# CONFIG_ATH5K_DEBUG is not set -# CONFIG_ATH5K_TRACER is not set -CONFIG_ATH5K_PCI=y +# CONFIG_ATH5K is not set +# CONFIG_ATH5K_PCI is not set CONFIG_ATH9K_HW=y CONFIG_ATH9K_COMMON=y CONFIG_ATH9K_BTCOEX_SUPPORT=y CONFIG_ATH9K=y CONFIG_ATH9K_PCI=y -CONFIG_ATH9K_AHB=y +# CONFIG_ATH9K_AHB is not set # CONFIG_ATH9K_DEBUGFS is not set # CONFIG_ATH9K_DYNACK is not set # CONFIG_ATH9K_WOW is not set CONFIG_ATH9K_RFKILL=y # CONFIG_ATH9K_CHANNEL_CONTEXT is not set CONFIG_ATH9K_PCOEM=y -CONFIG_ATH9K_PCI_NO_EEPROM=y -CONFIG_ATH9K_HTC=y -# CONFIG_ATH9K_HTC_DEBUGFS is not set +# CONFIG_ATH9K_PCI_NO_EEPROM is not set +# CONFIG_ATH9K_HTC is not set # CONFIG_ATH9K_HWRNG is not set -CONFIG_CARL9170=y -CONFIG_CARL9170_LEDS=y -CONFIG_CARL9170_WPC=y -# CONFIG_CARL9170_HWRNG is not set +# CONFIG_CARL9170 is not set # CONFIG_ATH6KL is not set -CONFIG_AR5523=y +# CONFIG_AR5523 is not set # CONFIG_WIL6210 is not set CONFIG_ATH10K=y CONFIG_ATH10K_CE=y CONFIG_ATH10K_PCI=y -CONFIG_ATH10K_USB=y +# CONFIG_ATH10K_USB is not set # CONFIG_ATH10K_DEBUG is not set # CONFIG_ATH10K_DEBUGFS is not set # CONFIG_ATH10K_TRACING is not set @@ -2285,8 +2287,7 @@ CONFIG_RTLWIFI_DEBUG=y CONFIG_RTL8192C_COMMON=y CONFIG_RTL8723_COMMON=y CONFIG_RTLBTCOEXIST=y -CONFIG_RTL8XXXU=y -# CONFIG_RTL8XXXU_UNTESTED is not set +# CONFIG_RTL8XXXU is not set CONFIG_RTW88=y # CONFIG_RTW88_8822BE is not set # CONFIG_RTW88_8822BU is not set @@ -4108,7 +4109,7 @@ CONFIG_EEEPC_LAPTOP=y # CONFIG_X86_PLATFORM_DRIVERS_HP is not set # CONFIG_WIRELESS_HOTKEY is not set # CONFIG_IBM_RTL is not set -CONFIG_IDEAPAD_LAPTOP=y +# CONFIG_IDEAPAD_LAPTOP is not set # CONFIG_SENSORS_HDAPS is not set # CONFIG_THINKPAD_ACPI is not set # CONFIG_THINKPAD_LMI is not set @@ -4944,6 +4945,10 @@ CONFIG_XZ_DEC_SPARC=y # CONFIG_XZ_DEC_MICROLZMA is not set CONFIG_XZ_DEC_BCJ=y # CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_DECOMPRESS_ZSTD=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_INTERVAL_TREE=y CONFIG_XARRAY_MULTI=y diff --git a/fil/rc.d/rc.init b/fil/rc.d/rc.init @@ -5,7 +5,7 @@ umask 022 . /etc/rc.conf RCINIT=1 . /lib/g_fun.sh -PATH=/local/bin:/bin:/sucks/bin +PATH=/local/bin:/bin:/plan9/bin:/sucks/bin export PATH clear @@ -14,15 +14,19 @@ printf "${green}===( ${bold}${white}%s${norm}${green} )=== booting${norm}\n" \ ctrlaltdel -s +msg info "Mounted filesystems" +mount +sleep 10 msg info "Mounting essential filesystems" -mount -n -t proc -o nosuid,noexec,nodev proc /proc -mount -n -t sysfs -o nosuid,noexec,nodev sysfs /sys -mount -n -t tmpfs -o nosuid,nodev,noatime,mode=1777 tmp /tmp +mount -n -t proc -o nosuid,noexec,nodev proc /proc +mount -n -t sysfs -o nosuid,noexec,nodev sysfs /sys +mount -n -t tmpfs -o nosuid,nodev,noatime,mode=1777 tmp /tmp mkdir -p /dev/shm -mount -n -t tmpfs -o nosuid,nodev,noatime,mode=1777 shm /dev/shm +mount -n -t tmpfs -o nosuid,nodev,noatime,mode=1777 shm /dev/shm mkdir -p /dev/pts -mount -n -t devpts -o nosuid,noexec,noatime,gid=5,mode=0620 devpts /dev/pts -mount -n -t tmpfs -o nosuid,nodev,noatime,mode=0755 run /var/run +mount -n -t devpts -o nosuid,noexec,noatime,gid=5,mode=0620 devpts /dev/pts +mount -n -t tmpfs -o nosuid,nodev,noatime,mode=0755 run /var/run +mount -n -t efivarfs -o nosuid,nodev,noexec efivarfs /sys/firmware/efi/efivars create_logfile diff --git a/lib/env.sh b/lib/env.sh @@ -5,6 +5,23 @@ GUSER=strajder +CONFIG_EXTRA_FIRMWARE="" + +# Enter custom firmware inclusion patterns +# Contents of this variable is sent as argument to rsync(1) +# +# Important: If you don't need firmware, delete lines except the very next line, +# until "# /Edit this" +INCLUDE_FIRMWARE='' +while read -r line +do + INCLUDE_FIRMWARE="${INCLUDE_FIRMWARE}${line} " + # v-------- Enter patterns below this line +done <<'!' +--include="ath10k/" +--include="ath10k/**" +! + # /Edit this GHOME=/home/${GUSER} @@ -43,6 +60,7 @@ JN=${JN:- -j$(($(grep ^processor /proc/cpuinfo | wc -l) * 3))} G_PKGDB=${G_SPKG}/pkgdb.tsv +export GUSER INCLUDE_FIRMWARE export CT_TRI GR_TRI GHOME GUID GGID GR CTD FLD PTD TLD CT TL G_ARCH G_ARCH_EXT export G_ARCH_EXT_ALT G_FIFO G_LGL G_LOG G_FIL G_LIB G_LOGFILE G_PAT G_PKG export G_SHORTLOG G_SPKG G_SRC G_TARGET G_VER JN diff --git a/lib/pkgs.tsv b/lib/pkgs.tsv @@ -70,6 +70,7 @@ https://ftp.gnu.org/gnu/texinfo/texinfo-7.0.3.tar.xz 7d14f7458f2b7d0ee0b740e00a https://ftp.gnu.org/gnu/which/which-2.21.tar.gz d2f04a5c5291f2d7d1226982da7cf999d36cfe24d3f7bda145508efcfb359511251d3c68b860c0ddcedd66b15a0587b648a35ab6d1f173707565305c506dfc61 https://ftp.gnu.org/pub/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.xz e9e857bd81bf7a370307d6848c81b2f5403db8c7b5207f54bce3f3faac3bde63445684092c2bc1a2427cddb6f7746496d9fbbef05fbbd77f2810b2998f1f9173 https://ftpmirror.gnu.org/autoconf-archive/autoconf-archive-2023.02.20.tar.xz a744f5aa0c1a813b81ad1528aebf7511bde7f470f34626d2057ed6664127120182e031fec5d22027d4a204544266135f202b8ef453bff70a3b0315c506c82528 +https://git.sr.ht/~strahinja/galeb-mkinitramfs/archive/v0.3.tar.gz mkinitramfs-0.3.tar.gz 93b0f5fd870da4fe4b2fb42f6a7fdcd6047b075336544c3132c76714b64c6b355aba9bb42422b0de2af4aa20e112c86707a5f1c045a64cc536ea1a593f815a33 https://git.sr.ht/~strahinja/mkpk/archive/v0.1.10.tar.gz mkpk-0.1.10.tar.gz 4fc1f20fb46a24ee96508890dc8928769b450153b914b83d20dc37834c4b229819b29fff97c64497fd567c9629f853e2eab80ff3bd07cbf42e8c3d51b2496c1d https://git.sr.ht/~strahinja/sled/archive/v0.11.5.tar.gz sled-0.11.5.tar.gz c329eb5086ea5ab76f109a1b15d8ec3c94c37bc09e306490502fd0b8592c59feeb6afd041d6ad14aaedf1c32902fe254951d9af83319c35d50f302fccfe1e138 https://git.sr.ht/~strahinja/svc/archive/v0.1.tar.gz svc-0.1.tar.gz b78b30b87ce5d3803eafa6999219d2db51f7ab5f01a0e7fcc871b3fa09da5834fefe6d3e9a83eb31b27251afaa142bb4ff320cfa100efda46531700103805e13