LinuxForum.Fans
Тема

обновление google-chrome

Автор: deleted_user 4 сообщений 4253 просмотров
#372634

Браузер google-chrome частенько обновляется. Не секрет, что для Slackware готового пакета нет и его создание возлагается на slackbuild,
который расположен по адресу /slackware-14.1/extra/google-chrome/google-chrome.SlackBuild
slackbuild не обновлялся с 2012 года и содержит несколько несущественных недостатков, таких как отсутствие иконки в меню DE,
потому как указан не правильно путь, необходимость скачивать самому пакет для перепаковки и т. д...
Мне надоело каждый раз вручную подправлять всё это, поэтому я изменил оригинальный slackbuild, стараясь устранить недостатки.
Вот что получилось:

Показать

[console]
#!/bin/sh

# Copyright 2009-2010 Erik Hanson, Minneapolis, MN, USA
# Copyright 2011 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.

PKGNAM=google-chrome
RELEASE=${RELEASE:-stable} # stable, beta, or unstable

# Allow $ARCH to be preset before running the script. This is useful in the
# case where someone is running a 32-bit chroot environment under an x86_64
# kernel:
ARCH=${ARCH:-$(uname -m)}

case "$ARCH" in
i?86) DEBARCH="i386" ; LIBDIRSUFFIX="" ; ARCH=i386 ;;
x86_64) DEBARCH="amd64" ; LIBDIRSUFFIX="64" ; ARCH=x86_64 ;;
*) echo "Package for $(uname -m) architecture is not available." ; exit 1 ;;
esac

if [ ! -r google-chrome-stable_current_i386.deb ] ; then
wget https://dl-ssl.google.com/linux/direct/google-chrome-stable_current_i386.deb
fi

echo 'diff -urN old/google/chrome/google-chrome new/google/chrome/google-chrome' > root_work.patch
echo '--- old/google/chrome/google-chrome 2013-12-04 02:36:48.000000000 +0200' >> root_work.patch
echo '+++ new/google/chrome/google-chrome 2013-12-29 11:57:58.000000000 +0200' >> root_work.patch
echo '@@ -48,4 +48,4 @@' >> root_work.patch
echo ' fi' >> root_work.patch
echo ' fi' >> root_work.patch
echo ' ' >> root_work.patch
echo '-exec -a "$0" "$HERE/chrome" "$@"' >> root_work.patch
echo '+exec -a "$0" "$HERE/chrome" "$@" --user-data-dir' >> root_work.patch

gzip root_work.patch

# Get the version from the Debian/Ubuntu .deb (thanks to Fred Richards):
VERSION=$(ar p google-chrome-${RELEASE}_current_${DEBARCH}.deb control.tar.gz 2> /dev/null | tar zxO ./control 2> /dev/null | grep Version | awk '{print $2}' | cut -d- -f1)
BUILD=${BUILD:-1_lfm}

if [ ! $UID = 0 ]; then
cat << EOF

This script must be run as root.

EOF
exit 1
fi

CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
OUTPUT=${OUTPUT:-/tmp}

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $PKG
ar p $CWD/google-chrome-${RELEASE}_current_${DEBARCH}.deb data.tar.lzma | lzma -d | tar xv || exit 1
chown -R root:root .
chmod -R u+w,go+r-w,a-s .

cd $PKG/opt
zcat $CWD/root_work.patch.gz | patch -p1 || exit 1
cd $PKG

# Make sure top-level perms are correct:
chmod 0755 .
# This needs to be setuid root:
chmod 4711 opt/google/chrome/chrome-sandbox
# The cron job is for Debian/Ubuntu only:
rm -rf etc

# Link to the standard Mozilla library names:
sed -i 's,libnss3.so.1d,libnss3.so\x00\x00\x00,g;
s,libnssutil3.so.1d,libnssutil3.so\x00\x00\x00,g;
s,libsmime3.so.1d,libsmime3.so\x00\x00\x00,g;
s,libssl3.so.1d,libssl3.so\x00\x00\x00,g;
s,libplds4.so.0d,libplds4.so\x00\x00\x00,g;
s,libplc4.so.0d,libplc4.so\x00\x00\x00,g;
s,libnspr4.so.0d,libnspr4.so\x00\x00\x00,g;' opt/google/chrome/chrome

# --mandir=/usr/man:
mv $PKG/usr/share/man $PKG/usr/man
# Compress manual pages:
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do
ln -s $( readlink $i ).gz $i.gz
rm $i
done

rm $PKG/usr/share/applications/google-chrome.desktop

# Install a .desktop launcher:
cat << EOF >> $PKG/usr/share/applications/google-chrome.desktop
[Desktop Entry]
Version=1.0
Name=Google Chrome
GenericName=Web Browser
GenericName[ru]=Веб-браузер
Comment=Access the Internet
Comment[ru]=Доступ в Интернет
Exec=/usr/bin/google-chrome-stable %U
Terminal=false
Icon=google-chrome
Type=Application
Categories=Network;WebBrowser;
MimeType=text/html;text/xml;application/xhtml_xml;image/webp;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp;
X-Ayatana-Desktop-Shortcuts=NewWindow;NewIncognito

[NewWindow Shortcut Group]
Name=New Window
Name[ru]=Новое окно
Exec=/usr/bin/google-chrome-stable
TargetEnvironment=Unity

[NewIncognito Shortcut Group]
Name=New Incognito Window
Name[ru]=Новое окно в режиме инкогнито
Exec=/usr/bin/google-chrome-stable --incognito
TargetEnvironment=Unity
EOF

cat $CWD/$PKGNAM.SlackBuild > $PKG/usr/share/doc/google-chrome-stable/$PKGNAM.SlackBuild

cat << EOF >> $PKG/install/slack-desc
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description. Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in. You must
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.

|-----handy-ruler----------------------------------------------------|
google-chrome: google-chrome (Google Chrome web browser)
google-chrome:
google-chrome: Google Chrome is a web browser that combines a minimal design with
google-chrome: sophisticated technology to make the web faster, safer, and easier.
google-chrome:
google-chrome:
google-chrome:
google-chrome:
google-chrome:
google-chrome: Homepage: http://www.google.com/chrome
google-chrome:
EOF

mkdir -p $PKG/install
mkdir -p $PKG/usr/share/icons/hicolor/128x128/apps/
mkdir -p $PKG/usr/share/icons/hicolor/16x16/apps/
mkdir -p $PKG/usr/share/icons/hicolor/22x22/apps/
mkdir -p $PKG/usr/share/icons/hicolor/24x24/apps/
mkdir -p $PKG/usr/share/icons/hicolor/256x256/apps/
mkdir -p $PKG/usr/share/icons/hicolor/32x32/apps/
mkdir -p $PKG/usr/share/icons/hicolor/48x48/apps/
mkdir -p $PKG/usr/share/icons/hicolor/64x64/apps/

mv $PKG/opt/google/chrome/product_logo_128.png $PKG/usr/share/icons/hicolor/128x128/apps/google-chrome.png
mv $PKG/opt/google/chrome/product_logo_16.png $PKG/usr/share/icons/hicolor/16x16/apps/google-chrome.png
mv $PKG/opt/google/chrome/product_logo_22.png $PKG/usr/share/icons/hicolor/22x22/apps/google-chrome.png
mv $PKG/opt/google/chrome/product_logo_24.png $PKG/usr/share/icons/hicolor/24x24/apps/google-chrome.png
mv $PKG/opt/google/chrome/product_logo_256.png $PKG/usr/share/icons/hicolor/256x256/apps/google-chrome.png
mv $PKG/opt/google/chrome/product_logo_32.png $PKG/usr/share/icons/hicolor/32x32/apps/google-chrome.png
mv $PKG/opt/google/chrome/product_logo_48.png $PKG/usr/share/icons/hicolor/48x48/apps/google-chrome.png
mv $PKG/opt/google/chrome/product_logo_64.png $PKG/usr/share/icons/hicolor/64x64/apps/google-chrome.png

cd $PKG/opt/google/chrome/locales/; find . -type f -not -name "ru.pak" -print0 |xargs -0 rm

cd $PKG
/sbin/makepkg -l y -c n $CWD/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
[/console]

Теперь скрипт сам загружает пакет для перепаковки,..
Иконки перемещаются туда, где им и положено быть, в каталог /usr/share/icons.
Исправлен скрипт /opt/google/chrome/google-chrome, чтобы браузер мог запускаться и в сеансе root.
Для облегчения пакета удаляются все пакеты локализаций, кроме русской.

Труднее всего далось исправление скрипта /opt/google/chrome/google-chrome...
Нужно было всего лишь добавить опцию --user-data-dir в строку exec -a "$0" "$HERE/chrome" "$@"
Пришлось вот так делать заплатку и налаживать её на скрипт.
sed я не "разгрыз", слэш наверное мешает. Даже создание заплатки из slackbuild не получалось...
cat << EOF >> упрямо портил строку "exec -a "$0" "$HERE/chrome" "$@"
Только команда echo и помогла.
Может кто знает более толковое решение проблемы, только чтобы действия производились из slackbuild?

#372636
"cdrw" написал:
cat << EOF >> упрямо портил строку "exec -a "$0" "$HERE/chrome" "$@"
text
#!/bin/bash

TMP=$(mktemp)

cat <<EOF >$TMP

echo "test" echo "my name is \$0"

EOF

sh $TMP

rm $TMP

я думаю идея ясна. Обрати внимание на cat >

"cdrw" написал:
sed я не "разгрыз"
что там непонятного?
#372656

Справедливости ради, проблемы с иконкой начались только с 33 версии хрома, она в самом пакете переехала в правильное место, исправления в этой части минимальные: http://www.slackware.ru/forum/viewtopic.php?f=32&t=1154

Войдите или зарегистрируйтесь, чтобы ответить.