From d349df243208f677612222fbbc5fb7ae65364c8e Mon Sep 17 00:00:00 2001 From: legop3 <46182676+legop3@users.noreply.github.com> Date: Tue, 7 Jul 2026 00:01:51 -0400 Subject: [PATCH] Share Google TTS asset installer with laptop profile --- pi/install/pi_profile.sh | 69 ++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/pi/install/pi_profile.sh b/pi/install/pi_profile.sh index 599f114c..526d8d53 100644 --- a/pi/install/pi_profile.sh +++ b/pi/install/pi_profile.sh @@ -113,20 +113,8 @@ install_google_tts_assets() { local voice_dir="${asset_dir}/en-us-x-multi-r30" local dist_url="https://storage.googleapis.com/chromeos-localmirror/distfiles/googletts-26.5.tar.xz" local tmp_dir - local lib_member - - case "$(uname -m)" in - aarch64|arm64) - lib_member="libchrometts_arm64.so" - ;; - armv7l|armhf) - lib_member="libchrometts_armv7.so" - ;; - *) - log "WARNING: unsupported Chrome TTS architecture $(uname -m); skipping Google TTS assets" - return - ;; - esac + local lib_member="" + local member if [[ -f "${asset_dir}/libchrometts.so" && -f "${voice_dir}/pipeline.pb" ]]; then log "Google Chrome TTS assets already installed; skipping download" @@ -135,8 +123,55 @@ install_google_tts_assets() { tmp_dir="$(mktemp -d)" log "Downloading Google Chrome TTS assets..." - curl -L -o "${tmp_dir}/googletts-26.5.tar.xz" "$dist_url" - tar -xf "${tmp_dir}/googletts-26.5.tar.xz" -C "$tmp_dir" en-us-x-multi.zvoice "$lib_member" + if ! curl -L -o "${tmp_dir}/googletts-26.5.tar.xz" "$dist_url"; then + rm -rf "$tmp_dir" + log "WARNING: failed to download Google Chrome TTS assets; chromegtts will be unavailable" + return + fi + + # The ChromeOS tarball has had architecture-specific library names. The Pi + # profile historically hard-coded ARM names; the laptop profile should be able + # to use the same installer when a matching x86_64 library exists, and should + # fail soft when it does not. + local -a candidate_libs=() + case "$(uname -m)" in + aarch64|arm64) + candidate_libs=(libchrometts_arm64.so libchrometts.so) + ;; + armv7l|armhf) + candidate_libs=(libchrometts_armv7.so libchrometts.so) + ;; + x86_64|amd64) + candidate_libs=(libchrometts_x86_64.so libchrometts_amd64.so libchrometts_x64.so libchrometts.so) + ;; + i386|i686) + candidate_libs=(libchrometts_x86.so libchrometts_i386.so libchrometts.so) + ;; + *) + log "WARNING: unsupported Chrome TTS architecture $(uname -m); skipping Google TTS assets" + rm -rf "$tmp_dir" + return + ;; + esac + + for member in "${candidate_libs[@]}"; do + if tar -tf "${tmp_dir}/googletts-26.5.tar.xz" "$member" >/dev/null 2>&1; then + lib_member="$member" + break + fi + done + + if [[ -z "$lib_member" ]]; then + log "WARNING: no libchrometts library matching $(uname -m) found in Google TTS archive; chromegtts will be unavailable" + rm -rf "$tmp_dir" + return + fi + + if ! tar -xf "${tmp_dir}/googletts-26.5.tar.xz" -C "$tmp_dir" en-us-x-multi.zvoice "$lib_member"; then + rm -rf "$tmp_dir" + log "WARNING: failed to unpack Google Chrome TTS assets; chromegtts will be unavailable" + return + fi install -d -o root -g root -m 0755 "$asset_dir" install -o root -g root -m 0644 "${tmp_dir}/${lib_member}" "${asset_dir}/libchrometts.so" @@ -147,7 +182,7 @@ install_google_tts_assets() { find "$asset_dir" -type d -exec chmod 0755 {} + find "$asset_dir" -type f -exec chmod 0644 {} + rm -rf "$tmp_dir" - log "Installed Google Chrome TTS assets to $asset_dir" + log "Installed Google Chrome TTS assets to $asset_dir using $lib_member" } install_pi_profile() {