mirror of
https://github.com/chromebrew/chromebrew.git
synced 2026-01-09 07:28:01 -05:00
* Make basic crew-profile-base package * Use crew consts * Upgrade to 0.0.2-pre2 * Convert aa* to cf* * Docbook * aa* to dz* * docbook-xsl * through fz* and fix environment variables * through mz* * through pz* * through zz* * fix crew-profile-base * upgrade crew-profile-base * major crew-profile-base changes * Upgrade crew-profile-base and fix xdg-base * fix sha256sum * Remove stale files * pkgsrc and sommelier * Add crew-profile-base to core packages and ready for merging * Bump versions * prevent conflicts with #5494 * fix sha256sum * fix fop * profile.d is not ours * fix bash * Upgrade crew-profile-base to 0.0.1-pre6 and fix bash * Remove self-referencing comment * Add binaries, fix rust, fix #{@ver} * move compatibility line * add core mandb deps back * File.exists? => File.exist? * deduplicate @env * update packages * Fix gdk_pixbug source url * Add binaries, use rubocop style fixes * Update cf from 6.36.1-1 to 6.53.0 * fix sl * fix depot tools * remove apulse since it conflicts with pulseaudio. * refactor crew_profile_base * first tranche of builds * go * add cf * hunspell * transmission * clean up dependency & env situation for gdk_pixbuf * fix gettext * fix nano * fix intel-media-driver * add zziplib for texlive * fix texlive * split fuse for flatpak * fix flatpak * delete rack (broken and unmaintained) * fix packer completion * modify and fix sl * fix s * fix stressng * fix stack * Add TMPDIR * Remove TMPDIR from build files * Fix aws2 version * Go: remove extraneous dependency * hunspell_fr_fr: use french in description * intel media driver: remove case x86_64 * aws2: quickfix * everything but texlive * texlive * fix stressng * Delete pkgsrc.rb * add back pkgsrc Co-authored-by: Satadru Pramanik <satadru@gmail.com> Co-authored-by: Ed Reel <edreel@gmail.com> Co-authored-by: satmandu <satadru@umich.edu>
228 lines
6.9 KiB
Bash
Executable File
228 lines
6.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# exit on fail
|
|
set -e
|
|
|
|
#chromebrew directories
|
|
OWNER="${OWNER:-skycocker}"
|
|
REPO="${REPO:-chromebrew}"
|
|
BRANCH="${BRANCH:-master}"
|
|
URL="https://raw.githubusercontent.com/${OWNER}/${REPO}/${BRANCH}"
|
|
CREW_PREFIX="${CREW_PREFIX:-/usr/local}"
|
|
CREW_LIB_PATH="${CREW_PREFIX}/lib/crew/"
|
|
CREW_CONFIG_PATH="${CREW_PREFIX}/etc/crew/"
|
|
CREW_BREW_DIR="${CREW_PREFIX}/tmp/crew/"
|
|
CREW_DEST_DIR="${CREW_BREW_DIR}/dest"
|
|
CREW_PACKAGES_PATH="${CREW_LIB_PATH}/packages"
|
|
CURL="${CURL:-curl}"
|
|
|
|
# EARLY_PACKAGES cannot depend on crew_profile_base for their core operations (completion scripts are fine)
|
|
EARLY_PACKAGES="gcc10 llvm brotli c_ares libcyrussasl libiconv libidn2 \
|
|
libmetalink libnghttp2 libpsl libssh2 libtirpc libunistring lz4 openldap \
|
|
rtmpdump zstd ncurses ca_certificates ruby libffi openssl nettle krb5 \
|
|
p11kit libtasn1 gnutls curl git icu4c libedit"
|
|
|
|
ARCH="$(uname -m)"
|
|
|
|
GREEN='\e[1;32m';
|
|
RED='\e[1;31m';
|
|
BLUE='\e[1;34m';
|
|
YELLOW='\e[1;33m';
|
|
RESET='\e[0m'
|
|
|
|
if [ "${EUID}" == "0" ]; then
|
|
echo -e "${RED}Chromebrew should not be installed or run as root.${RESET}"
|
|
exit 1;
|
|
fi
|
|
|
|
case "${ARCH}" in
|
|
"i686"|"x86_64"|"armv7l"|"aarch64")
|
|
LIB_SUFFIX=
|
|
[ "${ARCH}" == "x86_64" ] && LIB_SUFFIX='64'
|
|
;;
|
|
*)
|
|
echo -e "${RED}Your device is not supported by Chromebrew yet :/${RESET}"
|
|
exit 1;;
|
|
esac
|
|
|
|
# This will allow things to work without sudo
|
|
crew_folders="bin cache doc docbook etc include lib lib$LIB_SUFFIX libexec man sbin share tmp var"
|
|
for folder in $crew_folders
|
|
do
|
|
if [ -d "${CREW_PREFIX}"/"${folder}" ]; then
|
|
sudo chown -R "$(id -u)":"$(id -g)" "${CREW_PREFIX}"/"${folder}"
|
|
fi
|
|
done
|
|
sudo chown "$(id -u)":"$(id -g)" "${CREW_PREFIX}"
|
|
# Delete 'var' symlink on Cloudready platform
|
|
if [[ $(grep neverware /etc/lsb-release) != "" ]]; then
|
|
[ -L /usr/local/var ] && sudo rm -f /usr/local/var
|
|
[ -L /usr/local/local ] && sudo rm -f /usr/local/local
|
|
fi
|
|
|
|
# prepare directories
|
|
for dir in "${CREW_CONFIG_PATH}/meta" "${CREW_DEST_DIR}" "${CREW_PACKAGES_PATH}"; do
|
|
if [ ! -d "${dir}" ]; then
|
|
mkdir -p "${dir}"
|
|
fi
|
|
done
|
|
|
|
# prepare url and sha256
|
|
urls=()
|
|
temp_url=
|
|
sha256s=()
|
|
temp_sha256=
|
|
k=0
|
|
|
|
case "${ARCH}" in
|
|
"armv7l"|"aarch64")
|
|
if ! type "xz" > /dev/null; then
|
|
temp_url='https://github.com/snailium/chrome-cross/releases/download/v1.8.1/xz-5.2.3-chromeos-armv7l.tar.gz'
|
|
temp_sha256='4dc9f086ee7613ab0145ec0ed5ac804c80c620c92f515cb62bae8d3c508cbfe7'
|
|
urls[k]="$temp_url"
|
|
sha256s[k]="$temp_sha256"
|
|
k=$((k+1))
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
for package in $EARLY_PACKAGES; do
|
|
pkgfile="$($CURL -Lsf "${URL}"/packages/"$package".rb)"
|
|
temp_url="$(echo "$pkgfile" | grep -m 3 "$ARCH": | head -n 1 | cut -d\' -f2 | tr -d \' | tr -d \" | sed 's/,//g')"
|
|
temp_sha256="$(echo "$pkgfile" | grep -m 3 "$ARCH": | tail -n 1 | cut -d\' -f2 | tr -d \' | tr -d \" | sed 's/,//g')"
|
|
urls[k]="$temp_url"
|
|
sha256s[k]="$temp_sha256"
|
|
k=$((k+1))
|
|
done
|
|
|
|
# functions to maintain packages
|
|
function download_check () {
|
|
cd "${CREW_BREW_DIR}"
|
|
|
|
#download
|
|
echo -e "${BLUE}Downloading ${1}...${RESET}"
|
|
$CURL '-#' -C - -L --ssl "${2}" -o "${3}"
|
|
|
|
#verify
|
|
echo -e "${BLUE}Verifying ${1}...${RESET}"
|
|
echo -e "${GREEN}$(echo "${4}" "${3}" | sha256sum -c -)${RESET}"
|
|
case "${?}" in
|
|
0) ;;
|
|
*)
|
|
echo -e "${RED}Verification failed, something may be wrong with the download.${RESET}"
|
|
exit 1;;
|
|
esac
|
|
}
|
|
|
|
function extract_install () {
|
|
# Start with a clean slate
|
|
rm -rf "${CREW_DEST_DIR}"
|
|
mkdir "${CREW_DEST_DIR}"
|
|
cd "${CREW_DEST_DIR}"
|
|
|
|
#extract and install
|
|
echo "Extracting ${1} (this may take a while)..."
|
|
tar xpf ../"${2}"
|
|
echo "Installing ${1} (this may take a while)..."
|
|
tar cpf - ./*/* | (cd /; tar xp --keep-directory-symlink -f -)
|
|
mv ./dlist "${CREW_CONFIG_PATH}/meta/${1}.directorylist"
|
|
mv ./filelist "${CREW_CONFIG_PATH}/meta/${1}.filelist"
|
|
}
|
|
|
|
function update_device_json () {
|
|
cd "${CREW_CONFIG_PATH}"
|
|
|
|
if grep '"name": "'"${1}"'"' device.json > /dev/null; then
|
|
echo "Updating version number of ${1} in device.json..."
|
|
sed -i device.json -e '/"name": "'"${1}"'"/N;//s/"version": ".*"/"version": "'"${2}"'"/'
|
|
elif grep '^ }$' device.json > /dev/null; then
|
|
echo "Adding new information on ${1} to device.json..."
|
|
sed -i device.json -e '/^ }$/s/$/,\
|
|
{\
|
|
"name": "'"${1}"'",\
|
|
"version": "'"${2}"'"\
|
|
}/'
|
|
else
|
|
echo "Adding new information on ${1} to device.json..."
|
|
sed -i device.json -e '/^ "installed_packages": \[$/s/$/\
|
|
{\
|
|
"name": "'"${1}"'",\
|
|
"version": "'"${2}"'"\
|
|
}/'
|
|
fi
|
|
}
|
|
|
|
# create the device.json file if it doesn't exist
|
|
cd "${CREW_CONFIG_PATH}"
|
|
if [ ! -f device.json ]; then
|
|
echo -e "${YELLOW}Creating new device.json...${RESET}"
|
|
echo '{' > device.json
|
|
echo ' "architecture": "'"${ARCH}"'",' >> device.json
|
|
echo ' "installed_packages": [' >> device.json
|
|
echo ' ]' >> device.json
|
|
echo '}' >> device.json
|
|
fi
|
|
|
|
# extract, install and register packages
|
|
for i in $(seq 0 $((${#urls[@]} - 1))); do
|
|
url="${urls["${i}"]}"
|
|
sha256="${sha256s["${i}"]}"
|
|
tarfile="$(basename ${url})"
|
|
name="${tarfile%%-*}" # extract string before first '-'
|
|
rest="${tarfile#*-}" # extract string after first '-'
|
|
version="$(echo ${rest} | sed -e 's/-chromeos.*$//')"
|
|
# extract string between first '-' and "-chromeos"
|
|
|
|
download_check "${name}" "${url}" "${tarfile}" "${sha256}"
|
|
extract_install "${name}" "${tarfile}"
|
|
update_device_json "${name}" "${version}"
|
|
done
|
|
|
|
## workaround https://github.com/skycocker/chromebrew/issues/3305
|
|
sudo ldconfig > /dev/null 2> /dev/null || true
|
|
|
|
# create symlink to 'crew' in ${CREW_PREFIX}/bin/
|
|
rm -f "${CREW_PREFIX}/bin/crew"
|
|
ln -s "../lib/crew/crew" "${CREW_PREFIX}/bin/"
|
|
|
|
# prepare sparse checkout .rb packages directory and do it
|
|
cd "${CREW_LIB_PATH}"
|
|
rm -rf .git
|
|
git init
|
|
git remote add -f origin "https://github.com/${OWNER}/${REPO}.git"
|
|
git config core.sparsecheckout true
|
|
echo packages >> .git/info/sparse-checkout
|
|
echo lib >> .git/info/sparse-checkout
|
|
echo crew >> .git/info/sparse-checkout
|
|
git fetch origin "${BRANCH}"
|
|
git reset --hard origin/"${BRANCH}"
|
|
crew update
|
|
|
|
# install a base set of essential packages
|
|
yes | crew install buildessential less most
|
|
|
|
echo
|
|
if [[ "${CREW_PREFIX}" != "/usr/local" ]]; then
|
|
echo -e "${YELLOW}
|
|
Since you have installed Chromebrew in a directory other than '/usr/local',
|
|
you need to run these commands to complete your installation:
|
|
${RESET}"
|
|
|
|
echo -e "${BLUE}
|
|
echo 'export CREW_PREFIX=${CREW_PREFIX}' >> ~/.bashrc
|
|
echo 'export PATH=\"\${CREW_PREFIX}/bin:\${CREW_PREFIX}/sbin:\${PATH}\"' >> ~/.bashrc
|
|
echo 'export LD_LIBRARY_PATH=${CREW_PREFIX}/lib${LIB_SUFFIX}' >> ~/.bashrc
|
|
source ~/.bashrc
|
|
${RESET}"
|
|
fi
|
|
echo -e "${BLUE}
|
|
Edit ${CREW_PREFIX}/etc/env.d/02-pager to change the default PAGER.
|
|
more is used by default
|
|
|
|
You may wish to edit the ${CREW_PREFIX}/etc/env.d/01-editor file for an editor default.
|
|
|
|
Chromebrew provides nano, vim and emacs as default TUI editor options.
|
|
|
|
${RESET}"
|
|
echo -e "${GREEN}Chromebrew installed successfully and package lists updated.${RESET}"
|