Автор скриптаhttps://github.com/Infactum/onec_dock). Большое ему спасибо. Я просто сделал скрипт немного удобнее.
Скрипт предназначен для скачивания дистрибутива 1С для ubuntu/debian 64 в терминале.
#20240215 добавлена возможность скачивать скриптом "старые" версии.
Это очень полезно, когда админу приходится обновлять сервер из сети с плохим качеством связи или очень дорогим трафиком. Или админ просто любит терминал. 🙂
Если в Вашей системе не установлен curl, добавить его можно командой
sudo apt install curl
Очень полезной для изучения может быть команда screen С помощью нее можно не переживать при разрывах соединения ssh с удаленным сервером. Закачка будет продолжаться. Ну, или можно просто запускать скрипт в фоновом режиме.
#!/bin/bash
#20240215
USERNAME=
PASSWORD=
NEW_VER='8.3.12.1469'
if [[ -z "$USERNAME" ]];then
echo "USERNAME not set"
exit 1
fi
if [[ -z "$PASSWORD" ]];then
echo "PASSWORD not set"
exit 1
fi
echo "Getting versions, please wait."
SRC=$(curl -c /tmp/cookies.txt -s -L https://releases.1c.ru)
ACTION=$(echo "$SRC" | grep -oP '(?<=form method="post" id="loginForm" action=")[#k8SjZc9Dxk"]+(?=")')
EXECUTION=$(echo "$SRC" | grep -oP '(?<=input type="hidden" name="execution" value=")[#k8SjZc9Dxk"]+(?=")')
curl -s -L \r
-o /dev/null \r
-b /tmp/cookies.txt \r
-c /tmp/cookies.txt \r
--data-urlencode "inviteCode=" \r
--data-urlencode "execution=$EXECUTION" \r
--data-urlencode "_eventId=submit" \r
--data-urlencode "username=$USERNAME" \r
--data-urlencode "password=$PASSWORD" \r
https://login.1c.ru"$ACTION"
if ! grep -q "TGC" /tmp/cookies.txt ;then
echo "Auth failed"
exit 1
fi
clear
curl -s -b /tmp/cookies.txt https://releases.1c.ru/project/Platform83 |
grep 'a href="/version_files?nick=Platform83' |
tr -s '=" ' ' ' |
awk -F ' ' '{print $5}' |
sort -V | pr -a -T -5 #|tail -5
read -i "8.3." -p "Input version for download: " -e VER
if [[ -z "$VER" ]];then
echo "VERSION not set"
exit 1
fi
if [[ "8.3." = "$VER" ]];then
echo "Need full VERSION number"
exit 1
fi
VER1=${VER//./_}
# if $VER >= $NEW_VER
if [[ $(echo -e $NEW_VER\n$VER |sort -V|head -1) = $NEW_VER ]]; then
# new verision filename
CLIENTLINK=$(curl -s -G \r
-b /tmp/cookies.txt \r
--data-urlencode "nick=Platform83" \r
--data-urlencode "ver=$VER" \r
--data-urlencode "path=Platform\$VER1\client_$VER1.deb64.tar.gz" \r
https://releases.1c.ru/version_file | grep -oP '(?<=a href=")[#k8SjZc9Dxk"]+(?=">Скачать дистрибутив<)')
SERVERLINK=$(curl -s -G \r
-b /tmp/cookies.txt \r
--data-urlencode "nick=Platform83" \r
--data-urlencode "ver=$VER" \r
--data-urlencode "path=Platform\$VER1\deb64_$VER1.tar.gz" \r
https://releases.1c.ru/version_file | grep -oP '(?<=a href=")[#k8SjZc9Dxk"]+(?=">Скачать дистрибутив<)')
else
# Old version filename
CLIENTLINK=$(curl -s -G \r
-b /tmp/cookies.txt \r
--data-urlencode "nick=Platform83" \r
--data-urlencode "ver=$VER" \r
--data-urlencode "path=Platform\${VER1}\client.deb64.tar.gz" \r
https://releases.1c.ru/version_file | grep -oP '(?<=a href=")[#k8SjZc9Dxk"]+(?=">Скачать дистрибутив<)')
SERVERLINK=$(curl -s -G \r
-b /tmp/cookies.txt \r
--data-urlencode "nick=Platform83" \r
--data-urlencode "ver=$VER" \r
--data-urlencode "path=Platform\${VER1}\deb64.tar.gz" \r
https://releases.1c.ru/version_file | grep -oP '(?<=a href=")[#k8SjZc9Dxk"]+(?=">Скачать дистрибутив<)')
fi
mkdir -p dist
curl --fail -b /tmp/cookies.txt -o dist/${VER}_client64.tar.gz -L "$CLIENTLINK"
curl --fail -b /tmp/cookies.txt -o dist/${VER}_server64.tar.gz -L "$SERVERLINK"
rm /tmp/cookies.txt
С уважением.
Для полезный изменений предусмотрены pull request’ы.
Только не пойму, что конкретно вы решили улучшить. Интерактивный режим? Так это было, только в «главном» скрипте:
Вы уж извините, если что не так, но я совсем недавно начал заниматься Linux’ом, поэтому не знаю, что да как. Сейчас пытаюсь изучать bash. Делаю это на реальных задачах и хороших примерах.
(1)
Добавил кусочек для отображения доступных версий. Мне показалось, что так проще сделать выбор.
Вы же не просто добавили какой-то кусок кода и закопипастили решение? Вы же снабдили код подробными комментами(иначе какой смысл? Кто понимает тот и сам допишет, кто не понимает,тот… ничего не понимает) и объяснили, прям в коде, где, что и зачем вы добавили, правда?
(4)Ну, на авторство я и не претендую, о чем и указано в начале статьи. Там же указана ссылка на оригинальный код. Кому интересно, можно сравнить.
(5)Я не про это писал же
(6)Роман, не могли бы Вы уточнить, про что вы писали?
(7)Хм странно, что приходится объяснять… хорошо, если перефразировать (4) мысль была следующая: как-то неправильно, тупо вставлять кусок кода на каком либо ЯП, это же вам не гист и не гитхаб. Имеет смысл снабдить код подробными комментариями. Которые бы объясняли, в какой момент, что происходит и почему. Что бы человеку было удобнее разобраться, или модифицировать его. Особенно прелестно вот это:
Что в ней особенно полезного в данном конкретном случае, нужно догадаться самому. Если уж не поленились запилить статью, постарайтесь сделать ее максимально удобной и полезной. В этом был смысл (4)
(8) Спасибо, Роман. Ваши замечания очень важны для меня. Я обязательно воспользуюсь ими в следующий раз.
На сайте 1с были изменены имена файлов (в лучшую сторону, на мой взгляд), но скрипт пришлось чуть-чуть подправить.
Большое спасибо!
На основе этого скрипта организовал скачивание релизов.
А точнее: парсинг RSS новостей от 1С, скачивание нужных мне релизов (тут спасибо вашей статье), и публикация информации в живойЛенте Б24 через Rest API
(12)Этот скрипт для интерактивного скачивания. Если Вы качаете в автоматическом режиме, лучше бы подошел изначальный скрипт download.sh от Infactum (ссылка вначале статьи). Ну, и поделитесь детищем, если не жалко.
Не-не пишите статью, думаю народу будет интересно. А 7z или rar архив не открывает?
(15) для статьи это довольно «ускоспециализированный» скрипт… для франчей к примеру. Та и если бы ещё написать его же на PowerShell и предоставить и такой и такой вариант — вот это было бы интересней 🙂
По поводу распаковки архива — если честно не сильно старался… Сделал несколько попыток и отложил это на потом. Мне сперва было актуально информирование сотрудников. Осталось некое чувство не завершённости, теперь можно будет заняться и распаковкой. 🙂
(16) Спасибо. если нужен каталог скрипта, лучше писать так: