Новости:

Форуму исполнилось 12 лет!

Мы в матрице .
Мы в телеге .

Главное меню

swaret

Автор timoshka, 13 мая 2013, 11:42:17

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

timoshka

А сабж есть для 13.37 и 14.0 ?

Graf

Последний, кажется, был для 13.1 или даже 13.0

timoshka

У меня в кроне скрипт сидел
swaret --update
swaret --upgrade -a

без воросов раз в месяц все апгрейдилось. А как теперь в 14?

bormant

#3
Сам swaret давненько не обновлялся (с октября 2006, по крайней мере тот, что живёт на https://sourceforge.net/projects/swaret/files/
Сам он -- сценарий на bash, от архитектуры не зависит.
Зеркала прописываются в /etc/swaret.conf, так что, в теории, должно быть -- меняем там же на VERSION=14.0 и в путь...

Если локаль в utf-8 и хочется русских сообщений от swaret, то делаем:
# cd /usr/share/swaret-1.6.3
# iconv -f koi8-r -t utf-8 swaret.lang.RUSSIAN.koi8r > swaret.lang.RUSSIAN.utf8
и в /etc/swaret.conf меняем соответственно на LANGUAGE=RUSSIAN.utf8


А на практике что именно не выходит?

timoshka

# swaret --update
swaret 1.6.3-2

Network Connection down!
Please, take a look to 'NIC' in /etc/swaret.conf!



# cat /etc/swaret.conf

VERSION=14.0
LANGUAGE=ENGLISH
ROOT=http://www.slackware.no/slackware/slackware-$VERSION
ROOT=http://www.slackware.at/data/slackware-$VERSION
ROOT=http://ftp.planetmirror.com/pub/slackware/slackware-$VERSION

DEP_ROOT=http://swaret.sourceforge.net

RANDOMR=0
ROLLBACK=0
ROLLBACKMAX=3
USEPKGDESC=1
EXCLUDE=kernel alsa lilo
EXCLUDE=swaret
EXCLUDE=aaa_
EXCLUDE=MANIFEST.bz2$
EXCLUDE=.*dl$ .*PACKAGER$ .*MYBUILD$
EXCLUDE=kde-i18n[ru,en_GB] koffice-i18n[ru,en_GB]

DEPENDENCY=1
DSEARCHLIB=1
DSEARCHM=0
MD5CHECK=1
GPGCHECK=0
DESC=0
CACHE_DIR=/var/swaret
LOG=1
LOG_FILE=/var/log/swaret
WARNINGS=1
INFORMATION=1

NIC=eth0
PROGRESS=0
TIMEOUT=35
RETRIES=5
PASSIVE_FTP=1


# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.114  netmask 255.255.255.0  broadcast 192.168.1.255


# ping ya.ru
PING ya.ru (87.250.250.203) 56(84) bytes of data.
64 bytes from www.yandex.ru (87.250.250.203): icmp_req=1 ttl=57 time=2.76 ms
64 bytes from www.yandex.ru (87.250.250.203): icmp_req=2 ttl=57 time=2.76 ms

bormant

Ну, это несложно, вот смотрите сами... Ищем причину:
$ grep -R "Network Connection down" /usr/share/swaret-1.6.3/swaret.lang.ENGLISH
MSG_NDOWN="$MSG_NDOWN""Network Connection down!""\n"
$ grep MSG_NDOWN /usr/sbin/swaret
      MSGERRp "check_for_network()" "$MSG_NDOWN"
А в check_for_network() видим такой способ проверки:
ip_address=`ifconfig | grep "inet addr" | grep -v 127.0.0.1 | tee | awk '{ print $2 }' | awk -F":" '{ print $2 }' | head -1`
Понимаем, что дело в смене формата вывода ifconfig, вместо "inet addr: x.x.x.x" теперь "inet x.x.x.x".

Остался пустяк, исправляем:
diff -u usr/sbin/swaret{.orig,}
--- usr/sbin/swaret.orig        2013-05-16 22:46:22.480480194 +0400
+++ usr/sbin/swaret     2013-05-16 22:48:36.801800947 +0400
@@ -2196,7 +2196,10 @@

check_for_network()
{
-   ip_address=`ifconfig | grep "inet addr" | grep -v 127.0.0.1 | tee | awk '{ print $2 }' | awk -F":" '{ print $2 }' | head -1`
+   #ip_address=`ifconfig | grep "inet addr" | grep -v 127.0.0.1 | tee | awk '{ print $2 }' | awk -F":" '{ print $2 }' | head -1`
+
+   # new ifconfig output format, "inet x.x.x.x" instead of "inet addr: x.x.x.x"
+   ip_address=`ifconfig | grep "inet " | grep -v 127.0.0.1 | tee | awk '{ print $2 }' | head -1`

    if [ ! $ip_address ] || [ ! `expr match $ip_address [0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]` ] ; then
       MSGERRp "check_for_network()" "$MSG_NDOWN"

fox

bormant, скажите пожалуйста, а как Вы составляете таки тексты? Не в ручную же?
И, учитывая мои "великие" познания в программировании, думаю написанное Вами нужно записать в файл с расширением diff ? А как потом использовать этот файл?
Прочитал, что diff - это утилита сравнения файлов, выводящая разницу между двумя файлами и еще больше запутался.  :blush_mini:

Swaret не использую, интересуюсь только ради самообразования.
За ранее спасибо.

bormant

#7
fox, боюсь не совсем правильно понял вопрос, что имелось в виду, само содержимое (слова, выкопировки из терминала) или его оформление?
По поводу содержимого, тут всё просто, пальцы, клавиатура, мышка для копирования из терминала, чуть-чуть (для общей организации процесса) голова ;-) .
По поводу оформления, тут тоже несложно, в редакторе сообщения форума (в полной версии по ссылке "ОТВЕТ") есть кнопочки, вставляющие коды разметки. Правда к ним мышкой тянуться/попадать лень, поэтому обычно вписываю вручную по ходу набора сообщения. Переключение РУС/ЛАТ висит на CapsLock, поэтому смена алфавита происходит моментально и почти подсознательно.

По поводу diff.  В файл записывать необязательно. В предыдущем сообщении наглядно видно, что было проделано:
- закомментирована старая строчка ip_address=...
- добавлена её копия и комментарий
- копия исправлена для достижения нужного результата
Всё это несложно проделать вручную, причём сохранение старого и добавление комментария в общем случае не требуется, то есть достаточно:
-   ip_address=`ifconfig | grep "inet addr" | grep -v 127.0.0.1 | tee | awk '{ print $2 }' | awk -F":" '{ print $2 }' | head -1`
+   ip_address=`ifconfig | grep "inet " | grep -v 127.0.0.1 | tee | awk '{ print $2 }' | head -1`


Но можно записать в файл и скормить его утилите patch, например так:
# cd /
# patch -v /tmp/swaret.diff
или так:
# cd /usr/sbin
# patch -p2 -v /tmp/swaret.diff

Подробнее см. man patch.


Сам файл diff был получен достаточно просто. Сначала сделал копию swaret с суффиксом .orig:
# cp /usr/sbin/swaret{,.orig}
фигурные скобки -- это bash-изм, позволяющий меньше набирать на клавиатуре, bash раскроет это в команду:
# cp /usr/sbin/swaret /usr/sbin/swaret.orig
Затем в файл /usr/sbin/swaret внёс требуемые исправления, чтобы в переменную ip_address попадал правильный адрес ip из вывода ifconfig. Затем сравнил файлы, оригинальный и исправленный, перенаправив вывод в файл /tmp/swaret.diff:
$ diff -u /usr/sbin/swaret{.orig,} > /tmp/swaret.diff
опять bash-изм, на самом деле выполнится команда:
$ diff -u /usr/sbin/swaret.orig /usr/sbin/swaret > /tmp/swaret.diff
Затем вставил содержимое в сообщение на форуме. Правда тут немного вру, по первой строчке вставленного видно, что просто скопировал результат сравнения из терминала, выполнив предварительно
$ diff -u /usr/sbin/swaret{.orig,}


timoshka

#8
Цитата: bormant от 16 мая 2013, 23:01:35
Остался пустяк, исправляем:

Пропатчить с помощью patch не получилось :(
# cd /usr/sbin
# patch -p2 < /swaret.diff
patching file swaret
patch unexpectedly ends in middle of line
Hunk #1 FAILED at 2196.
1 out of 1 hunk FAILED -- saving rejects to file swaret.rej


в ручную исправил и все завелось ! :)
Спасибо!!

bormant

Цитата: timoshka от 21 мая 2013, 12:50:16
patch unexpectedly ends in middle of line
1 out of 1 hunk FAILED -- saving rejects to file swaret.rej
Патч неожиданно завершился в середине строки.
СБОЙ 1 из 1 блоков  -- отвергнутое сохранено в файл swaret.rej
(rej -- сокращение от rejected)
Не полностью скопировался код с форума (кнопочка выделить у блоков кода присутствует не зря)? Нет перевода строки после последней строчки в файле патча? Ну и раз вручную проблему устранили, удалите /usr/sbin/swaret.rej.

Graf

Цитата: timoshka от 21 мая 2013, 12:50:16
Пропатчить с помощью patch не получилось :(

Кстати, у меня тоже.
Но собрав свой diff, отработало как надо.
Может копи-паст не корректно работает?
# diff -u /usr/sbin/swaret{.org,} > /tmp/swaret.diff
# cd /usr/sbin
# patch -p3 < /tmp/swaret.diff
patching file swaret
Hunk #1 succeeded at 2196 (offset -3 lines).
# swaret --update
swaret 1.6.3-2

[ ftp://ftp.slackware.no/pub/linux/slackware/slackware-14.0 ]
### Fetching CHECKSUMS List File... DONE!
...


сам diff

# cat /tmp/swaret.diff
--- /usr/sbin/swaret.org        2009-09-06 19:19:00.000000000 +0400
+++ /usr/sbin/swaret    2013-05-20 19:28:03.442679629 +0400
@@ -2199,7 +2199,7 @@

check_for_network()
{
-   ip_address=`ifconfig | grep "inet addr" | grep -v 127.0.0.1 | tee | awk '{ print $2 }' | awk -F":" '{ print $2 }' | head -1`
+   ip_address=`ifconfig | grep "inet " | grep -v 127.0.0.1 | tee | awk '{ print $2 }' | head -1`
   
    if [ ! $ip_address ] || [ ! `expr match $ip_address [0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]` ] ; then
       MSGERRp "check_for_network()" "$MSG_NDOWN"

Graf

2fox:
В качестве дальнейшего развития в работе с diff и patch можно почитать статью   Использование комманд diff и patch .

fox

bormat очень Вам признателен за ответ!
Редактор сообщений на форуме, с "горем пополам", я осилил. :)
Меня интересовал вопрос о том, как Вы получаете все эти "+", "-", "@@" и  как их понимаете и применяете.
После Вашего объяснения и прочтения статьи по ссылке от Graf (кстати, большое спасибо за ссылку), я понял, что  это работа diff.
И самое главное, я понял как это работает и для чего нужно!  :yahoo_mini:

Еще раз огромное спасибо!