Date: Thu, 19 Aug 2010 05:59:28 +0000 (UTC) From: Warner Losh <imp@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r211485 - in head/usr.sbin/pc-sysinstall: backend backend-query conf doc pc-sysinstall Message-ID: <201008190559.o7J5xShO091533@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: imp Date: Thu Aug 19 05:59:27 2010 New Revision: 211485 URL: http://svn.freebsd.org/changeset/base/211485 Log: Various updates to support new pc-sysinstall directive "installPackages" that will install packages and all package dependencies. PR: 148606 Submitted by: John Hixon Added: head/usr.sbin/pc-sysinstall/backend-query/set-mirror.sh (contents, props changed) head/usr.sbin/pc-sysinstall/backend/functions-installpackages.sh (contents, props changed) Modified: head/usr.sbin/pc-sysinstall/backend-query/Makefile head/usr.sbin/pc-sysinstall/backend-query/get-packages.sh head/usr.sbin/pc-sysinstall/backend/Makefile head/usr.sbin/pc-sysinstall/backend/functions-ftp.sh head/usr.sbin/pc-sysinstall/backend/functions-packages.sh head/usr.sbin/pc-sysinstall/backend/functions-runcommands.sh head/usr.sbin/pc-sysinstall/backend/parseconfig.sh head/usr.sbin/pc-sysinstall/conf/pc-sysinstall.conf head/usr.sbin/pc-sysinstall/doc/help-index head/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh Modified: head/usr.sbin/pc-sysinstall/backend-query/Makefile ============================================================================== --- head/usr.sbin/pc-sysinstall/backend-query/Makefile Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/backend-query/Makefile Thu Aug 19 05:59:27 2010 (r211485) @@ -3,8 +3,8 @@ FILES= detect-laptop.sh detect-nics.sh detect-emulation.sh disk-info.sh \ disk-list.sh disk-part.sh enable-net.sh get-packages.sh list-config.sh \ list-components.sh list-mirrors.sh list-packages.sh list-rsync-backups.sh \ - list-tzones.sh query-langs.sh send-logs.sh setup-ssh-keys.sh sys-mem.sh \ - test-live.sh test-netup.sh update-part-list.sh xkeyboard-layouts.sh \ + list-tzones.sh query-langs.sh send-logs.sh set-mirror.sh setup-ssh-keys.sh \ + sys-mem.sh test-live.sh test-netup.sh update-part-list.sh xkeyboard-layouts.sh \ xkeyboard-models.sh xkeyboard-variants.sh FILESMODE= ${BINMODE} FILESDIR=${SHAREDIR}/pc-sysinstall/backend-query Modified: head/usr.sbin/pc-sysinstall/backend-query/get-packages.sh ============================================================================== --- head/usr.sbin/pc-sysinstall/backend-query/get-packages.sh Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/backend-query/get-packages.sh Thu Aug 19 05:59:27 2010 (r211485) @@ -31,24 +31,16 @@ . ${PROGDIR}/backend/functions.sh . ${PROGDIR}/backend/functions-packages.sh -DEFAULT_FTP_SERVER="ftp.freebsd.org" -FTP_SERVER="${1}" ID=`id -u` - if [ "${ID}" -ne "0" ] then echo "Error: must be root!" exit 1 fi -if [ -z "${FTP_SERVER}" ] -then - FTP_SERVER="${DEFAULT_FTP_SERVER}" -fi - if [ ! -f "${PKGDIR}/INDEX" ] then - get_package_index "${FTP_SERVER}" + get_package_index fi if [ -f "${PKGDIR}/INDEX" ] Added: head/usr.sbin/pc-sysinstall/backend-query/set-mirror.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/pc-sysinstall/backend-query/set-mirror.sh Thu Aug 19 05:59:27 2010 (r211485) @@ -0,0 +1,40 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXSystems, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ + +. ${PROGDIR}/backend/functions.sh +. ${PROGDIR}/backend/functions-ftp.sh + +MIRROR="${1}" + +if [ -z "${MIRROR}" ] +then + echo "Error: No mirror specified!" + exit 1 +fi + +set_ftp_mirror "${MIRROR}" +exit 0 Modified: head/usr.sbin/pc-sysinstall/backend/Makefile ============================================================================== --- head/usr.sbin/pc-sysinstall/backend/Makefile Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/backend/Makefile Thu Aug 19 05:59:27 2010 (r211485) @@ -2,7 +2,7 @@ FILES= functions-bsdlabel.sh functions-cleanup.sh functions-disk.sh \ functions-extractimage.sh functions-ftp.sh functions-installcomponents.sh \ - functions-localize.sh functions-mountdisk.sh \ + functions-installpackages.sh functions-localize.sh functions-mountdisk.sh \ functions-mountoptical.sh functions-networking.sh \ functions-newfs.sh functions-packages.sh functions-parse.sh \ functions-runcommands.sh functions-unmount.sh \ Modified: head/usr.sbin/pc-sysinstall/backend/functions-ftp.sh ============================================================================== --- head/usr.sbin/pc-sysinstall/backend/functions-ftp.sh Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/backend/functions-ftp.sh Thu Aug 19 05:59:27 2010 (r211485) @@ -30,6 +30,8 @@ . ${BACKEND}/functions.sh . ${BACKEND}/functions-parse.sh +DEFAULT_FTP_SERVER="ftp.freebsd.org" + MAIN_FTP_SERVERS="\ Main Site: ftp.freebsd.org" @@ -274,7 +276,25 @@ show_mirrors() done IFS="${SAVE_IFS}" fi -} +}; + +set_ftp_mirror() +{ + MIRROR="${1}" + echo "${MIRROR}" > "${CONFDIR}/mirrors.conf" +}; + +get_ftp_mirror() +{ + MIRROR="${DEFAULT_FTP_SERVER}" + if [ -f "${CONFDIR}/mirrors.conf" ] + then + MIRROR=`cat "${CONFDIR}/mirrors.conf"` + fi + + VAL="${MIRROR}" + export VAL +}; get_ftp_mirrors() { @@ -371,4 +391,4 @@ get_ftp_mirrors() fi export VAL -} +}; Added: head/usr.sbin/pc-sysinstall/backend/functions-installpackages.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/pc-sysinstall/backend/functions-installpackages.sh Thu Aug 19 05:59:27 2010 (r211485) @@ -0,0 +1,118 @@ +#!/bin/sh +#- +# Copyright (c) 2010 iXsystems, Inc. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ + +# Functions which check and load any optional packages specified in the config + +. ${BACKEND}/functions.sh +. ${BACKEND}/functions-parse.sh + +# Recursively determine all dependencies for this package +determine_package_dependencies() +{ + local PKGNAME="${1}" + local DEPFILE="${2}" + + grep "${PKGNAME}" "${DEPFILE}" >/dev/null + if [ "$?" -ne "0" ] + then + echo "${PKGNAME}" >> "${DEPFILE}" + get_package_dependencies "${PKGNAME}" "1" + local DEPS="${VAL}" + + for d in ${DEPS} + do + get_all_package_dependencies "${d}" "${DEPFILE}" + done + fi +}; + +# Fetch packages dependencies from a file +fetch_package_dependencies() +{ + local DEPFILE + local DEPS + + DEPFILE="${1}" + DEPS=`cat "${DEPFILE}"` + + for d in ${DEPS} + do + get_package_short_name "${d}" + SNAME="${VAL}" + + get_package_category "${SNAME}" + CATEGORY="${VAL}" + + fetch_package "${CATEGORY}" "${d}" + done +}; + +# Check for any packages specified, and begin loading them +install_packages() +{ + # First, lets check and see if we even have any packages to install + get_value_from_cfg installPackages + if [ ! -z "${VAL}" ] + then + mkdir -p "${PKGTMPDIR}" + + HERE=`pwd` + cd "${PKGTMPDIR}" + + # Lets start by cleaning up the string and getting it ready to parse + strip_white_space ${VAL} + PACKAGES=`echo ${VAL} | sed -e "s|,| |g"` + for i in $PACKAGES + do + if get_package_name "${i}" + then + PKGNAME="${VAL}" + DEPFILE="${PKGTMPDIR}/.${PKGNAME}.deps" + + touch "${DEPFILE}" + determine_package_dependencies "${PKGNAME}" "${DEPFILE}" + fetch_package_dependencies "${DEPFILE}" + + # If the package is not already installed, install it! + if ! run_chroot_cmd "pkg_info -e ${PKGNAME}" + then + echo_log "Adding package ${PKGNAME}" + pkg_add -C "${FSMNT}" "${PKGNAME}.tbz" >/dev/null 2>&1 + if [ "$?" -eq "0" ] + then + echo_log "${PKGNAME} successfully installed!" + fi + fi + + rm "${DEPFILE}" + fi + done + + #rm -rf "${PKGTMPDIR}" + cd "${HERE}" + fi +}; Modified: head/usr.sbin/pc-sysinstall/backend/functions-packages.sh ============================================================================== --- head/usr.sbin/pc-sysinstall/backend/functions-packages.sh Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/backend/functions-packages.sh Thu Aug 19 05:59:27 2010 (r211485) @@ -34,29 +34,30 @@ get_package_index() { - FTP_SERVER="${1}" - FTP_DIR="ftp://${FTP_SERVER}/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}/packages" INDEX_FILE="INDEX" USE_BZIP2=0 + get_ftp_mirror + FTP_SERVER="${VAL}" + + FTP_DIR="ftp://${FTP_SERVER}/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}/packages" + if [ -f "/usr/bin/bzip2" ] then INDEX_FILE="${INDEX_FILE}.bz2" USE_BZIP2=1 fi - ftp "${FTP_DIR}/${INDEX_FILE}" - if [ -f "${INDEX_FILE}" ] - then - if [ "${USE_BZIP2}" -eq "1" ] - then - bzip2 -d "${INDEX_FILE}" - INDEX_FILE="${INDEX_FILE%.bz2}" - fi + fetch_file "${FTP_DIR}/${INDEX_FILE}" "${PKGDIR}/${INDEX_FILE}" "1" - mv "${INDEX_FILE}" "${PKGDIR}" + HERE=`pwd` + cd "${PKGDIR}" + if [ -f "${INDEX_FILE}" ] && [ "${USE_BZIP2}" -eq "1" ] + then + bzip2 -d "${INDEX_FILE}" fi -} + cd "${HERE}" +}; parse_package_index() { @@ -67,9 +68,11 @@ parse_package_index() while read -r line do + PKGNAME="" CATEGORY="" PACKAGE="" DESC="" + DEPS="" i=0 SAVE_IFS="${IFS}" @@ -77,7 +80,11 @@ parse_package_index() for part in ${line} do - if [ "${i}" -eq "1" ] + if [ "${i}" -eq "0" ] + then + PKGNAME="${part}" + + elif [ "${i}" -eq "1" ] then PACKAGE=`basename "${part}"` @@ -88,17 +95,23 @@ parse_package_index() elif [ "${i}" -eq "6" ] then CATEGORY=`echo "${part}" | cut -f1 -d' '` + + elif [ "${i}" -eq "8" ] + then + DEPS="${part}" fi i=$((i+1)) done echo "${CATEGORY}|${PACKAGE}|${DESC}" >> "${INDEX_FILE}.parsed" + echo "${PACKAGE}|${PKGNAME}|${DEPS}" >> "${INDEX_FILE}.deps" + IFS="${SAVE_IFS}" done exec 0<&3 -} +}; show_package_file() { @@ -117,7 +130,7 @@ show_package_file() done exec 0<&3 -} +}; show_packages_by_category() { @@ -128,7 +141,7 @@ show_packages_by_category() grep "^${CATEGORY}|" "${INDEX_FILE}" > "${TMPFILE}" show_package_file "${TMPFILE}" rm "${TMPFILE}" -} +}; show_package_by_name() { @@ -140,9 +153,118 @@ show_package_by_name() grep "^${CATEGORY}|${PACKAGE}" "${INDEX_FILE}" > "${TMPFILE}" show_package_file "${TMPFILE}" rm "${TMPFILE}" -} +}; show_packages() { show_package_file "${PKGDIR}/INDEX.parsed" -} +}; + +get_package_dependencies() +{ + PACKAGE="${1}" + LONG="${2:-0}" + RES=0 + + INDEX_FILE="${PKGDIR}/INDEX.deps" + REGEX="^${PACKAGE}|" + + if [ "${LONG}" -ne "0" ] + then + REGEX="^.*|${PACKAGE}|" + fi + + LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` + DEPS=`echo "${LINE}"|cut -f3 -d'|'` + + VAL="${DEPS}" + export VAL + + if [ -z "${VAL}" ] + then + RES=1 + fi + + return ${RES} +}; + +get_package_name() +{ + PACKAGE="${1}" + RES=0 + + INDEX_FILE="${PKGDIR}/INDEX.deps" + REGEX="^${PACKAGE}|" + + LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` + NAME=`echo "${LINE}"|cut -f2 -d'|'` + + VAL="${NAME}" + export VAL + + if [ -z "${VAL}" ] + then + RES=1 + fi + + return ${RES} +}; + +get_package_short_name() +{ + PACKAGE="${1}" + RES=0 + + INDEX_FILE="${PKGDIR}/INDEX.deps" + REGEX="^.*|${PACKAGE}|" + + LINE=`grep "${REGEX}" "${INDEX_FILE}" 2>/dev/null` + NAME=`echo "${LINE}"|cut -f1 -d'|'` + + VAL="${NAME}" + export VAL + + if [ -z "${VAL}" ] + then + RES=1 + fi + + return ${RES} +}; + +get_package_category() +{ + PACKAGE="${1}" + INDEX_FILE="${PKGDIR}/INDEX.parsed" + RES=0 + + LINE=`grep "|${PACKAGE}|" "${INDEX_FILE}" 2>/dev/null` + NAME=`echo "${LINE}"|cut -f1 -d'|'` + + VAL="${NAME}" + export VAL + + if [ -z "${VAL}" ] + then + RES=1 + fi + + return ${RES} +}; + +fetch_package() +{ + CATEGORY="${1}" + PACKAGE="${2}" + + get_ftp_mirror + FTP_SERVER="${VAL}" + + PACKAGE="${PACKAGE}.tbz" + if [ ! -f "${PKGTMPDIR}/${PACKAGE}" ] + then + PKGPATH="${CATEGORY}/${PACKAGE}" + FTP_PATH="ftp://${FTP_SERVER}/pub/FreeBSD/releases/${FBSD_ARCH}/${FBSD_BRANCH}/packages/${PKGPATH}" + fetch_file "${FTP_PATH}" "${PKGTMPDIR}/" "0" + fi +}; Modified: head/usr.sbin/pc-sysinstall/backend/functions-runcommands.sh ============================================================================== --- head/usr.sbin/pc-sysinstall/backend/functions-runcommands.sh Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/backend/functions-runcommands.sh Thu Aug 19 05:59:27 2010 (r211485) @@ -37,7 +37,10 @@ run_chroot_cmd() echo "$CMD" >${FSMNT}/.runcmd.sh chmod 755 ${FSMNT}/.runcmd.sh chroot ${FSMNT} sh /.runcmd.sh + RES=$? + rm ${FSMNT}/.runcmd.sh + return ${RES} }; run_chroot_script() @@ -50,8 +53,10 @@ run_chroot_script() echo_log "Running chroot script: ${SCRIPT}" chroot ${FSMNT} /.${SBASE} + RES=$? rm ${FSMNT}/.${SBASE} + return ${RES} }; @@ -64,7 +69,10 @@ run_ext_cmd() echo "${CMD}"> ${TMPDIR}/.runcmd.sh chmod 755 ${TMPDIR}/.runcmd.sh sh ${TMPDIR}/.runcmd.sh + RES=$? + rm ${TMPDIR}/.runcmd.sh + return ${RES} }; Modified: head/usr.sbin/pc-sysinstall/backend/parseconfig.sh ============================================================================== --- head/usr.sbin/pc-sysinstall/backend/parseconfig.sh Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/backend/parseconfig.sh Thu Aug 19 05:59:27 2010 (r211485) @@ -35,12 +35,15 @@ . ${BACKEND}/functions-disk.sh . ${BACKEND}/functions-extractimage.sh . ${BACKEND}/functions-installcomponents.sh +. ${BACKEND}/functions-installpackages.sh . ${BACKEND}/functions-localize.sh . ${BACKEND}/functions-mountdisk.sh . ${BACKEND}/functions-networking.sh . ${BACKEND}/functions-newfs.sh +. ${BACKEND}/functions-packages.sh . ${BACKEND}/functions-parse.sh . ${BACKEND}/functions-runcommands.sh +. ${BACKEND}/functions-ftp.sh . ${BACKEND}/functions-unmount.sh . ${BACKEND}/functions-upgrade.sh . ${BACKEND}/functions-users.sh @@ -117,6 +120,9 @@ then # Check if we have any optional modules to load install_components + # Check if we have any packages to install + install_packages + # Do any localization in configuration run_localize @@ -158,6 +164,9 @@ else # Check if we have any optional modules to load install_components + # Check if we have any packages to install + install_packages + # All finished, unmount the file-systems unmount_upgrade Modified: head/usr.sbin/pc-sysinstall/conf/pc-sysinstall.conf ============================================================================== --- head/usr.sbin/pc-sysinstall/conf/pc-sysinstall.conf Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/conf/pc-sysinstall.conf Thu Aug 19 05:59:27 2010 (r211485) @@ -51,6 +51,10 @@ export COMPFILEDIR COMPTMPDIR="/usr/.componenttmp" export COMPTMPDIR +# set the package temp directory, which is relative to FSMNT +PKGTMPDIR="/usr/.pkgtmp" +export PKGTMPDIR + # Variables to set the location of installation data UZIP_FILE="PCBSD.ufs.uzip" TAR_FILE="PCBSD.tbz" Modified: head/usr.sbin/pc-sysinstall/doc/help-index ============================================================================== --- head/usr.sbin/pc-sysinstall/doc/help-index Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/doc/help-index Thu Aug 19 05:59:27 2010 (r211485) @@ -34,10 +34,10 @@ System Query Commands list-components Returns a listing of the available components which can be installed - list-mirrors + list-mirrors [country] Returns a listing of the available FTP mirrors - list-packages + list-packages [category] [package] Returns a listing of the available packages list-rsync-backups <user> <host> <port> @@ -55,6 +55,9 @@ System Query Commands sys-mem Return the size of installed system RAM in MegaBytes + set-mirror <mirror> + Set FTP mirror + test-netup Test if an internet connection is available Modified: head/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh ============================================================================== --- head/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh Thu Aug 19 03:31:26 2010 (r211484) +++ head/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh Thu Aug 19 05:59:27 2010 (r211485) @@ -43,8 +43,11 @@ export PROGDIR COMPDIR="${PROGDIR}/components" export COMPDIR +CONFDIR="${PROGDIR}/conf" +export CONFDIR + # Set this to the packages location -PKGDIR="${PROGDIR}/conf" +PKGDIR="${CONFDIR}" export PKGDIR # End of user-editable configuration @@ -184,6 +187,10 @@ case $1 in get-packages) ${QUERYDIR}/get-packages.sh "${2}" ;; + # Function to set FTP mirror + set-mirror) ${QUERYDIR}/set-mirror.sh "${2}" + ;; + # Function which allows setting up of SSH keys setup-ssh-keys) ${QUERYDIR}/setup-ssh-keys.sh "${2}" "${3}" "${4}" ;;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201008190559.o7J5xShO091533>