Форум русскоязычного сообщества Ubuntu


За новостями русскоязычного сообщества и Ubuntu в целом можно следить на нашей страничке в Google+

Автор Тема: выполнение скриптов на удалённой машине без рук  (Прочитано 9074 раз)

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

Оффлайн graddata

  • Автор темы
  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1772
  • BIGCloud
    • Просмотр профиля
Не нашёл Пакетов для удалённого массового однократного или точнее раз-два в неделю установку вся кой лабуды.
Придумал, точнее додумался, вот такую фишку. Ничего нового не изобрёл, просто воспользовался стандартными действиями.

Выполнение скриптов на удалённой машине без рук.

Миссия рулить персональными компьютерами удалённо, не трогая их руками, не заходя через SSH. Полная автоматизация действий, на сколько позволяют скрипты.


Так, нам нужно, что бы на всех ПК выполнялись команды наши под sudo или root пользователя. Например нам нужно установить или обновить пакеты.
 
Логичность мысли следующая. На ПК создаём скрипт выполнения скрипта с удалённого хоста, например: smb://192.168.0.0 и нам нужно создать разумеется ярлычок на рабочем столе.

Делаем следующее, создаём скрипт который будет храниться у нас на ПК постоянно и который будет выполняться самостоятельно от рута при старте персонального компьютера.

Текст скрипта следующий:

 

#!/bin/sh
rmdir /home/user/.demo
# удаляем папку
mkdir /home/user/.demo
# создаём паку для наших исполнимых файлов и прочую хрень.
cd /home/user/.demo/
# переходим в нашу паку
smbget --guest -R smb://192.168.0.0/test
# качаем файлы из нашей папки.
sleep 8
# Тупо ждём 8 сек. Воздержимся от действий на 8 секунд
sh /home/user/.1234
# Запускаем скрипт который скачали с удалённого хоста, там то вот и хранятся наши команды, которые нужно выполнить от рута.

 
Обзовём его «.12», так он у нас будет скрытым файлом и поместим его в домик пользователя.
 

Далее мы лезем в консоль и вносим изменения в файл:

$nano /etc/modules и $nano /etc/rc.local
строчку $sh /home/user/.12 . Это нужно делать вручную, можно как удалённо по ssh так и на месте рабочем.
Возможно появится вопрос, «А на фига туда и туда писать», ответ «что бы точно сработало :-))» .

 Вот текст скрипта «.1234». Естественно название его менять нельзя, иначе не будет работать, тк в скрипте мы прописали запуск только данного скрипта, а вот в него мы запихиваем, что нашей душе угодно. В моём случае так:

#!/bin/sh
apt-get update # обновляем репозиторий
sleep 5 # спим 5 секунд
apt-get --assume-yes -q install konquest
# ставим игрушку из пакетов, входящих в стандартный набор рапозиториев
sleep 5 # спим 5 секунд
cd /home/user/.demo/ # переходим в эту папку. Ну, на всякий случай.
sleep 5 # спим 5 секунд
mv /home/user/.demo/konquest.desktop /home/user/Рабочий\ стол/
# переносим наш ярлык от этой игрушки на рабочий стол Ubuntu. Разумеется ярлык мы создали заранее и проверили его работоспособность.

 
Теперь разъяснение некоторых действий:
1 — для чего мы спим? Делаем не большую задержку, тк вероятно сеть не будет работать в некоторых случая очень шустро.
2 — откуда мы взяли ярлык? Его заранее сделали, и скопировали его в нашу папочку на сервере.
3 — что за путь /home/user/.demo/? В папку .demo закачиваются каждый раз файлы с нашего сервера при каждом включении компьютера.
4 — что будет если он не сработал, ни чего не работает? Проверьте сетевые подключения и перегрузитесь. Проверьте доступность удалённого хоста.
5 — какие права должны быть? Любые ))) тк всё выполняется от root, а ему всё равно.
6 - что за фигня с точками в начале фалов и папок? Это значит они будут скрытыми.


Сделав это раз на каждом из ПК, далее только поменяв текст скрипта на сервере, можно очень много с экономить время на обслуживании.
Например бональное обновление или установку пакетика.
Или рассылку документов. Вечером выложил, утром народ получил их.

Мне очень нравиться эта идея. А как вы эту проблему решили? У меня просто более 100 ПК на линухе работает. и Количество их возрастает, тк пиратка дохнет очень часто, а ставить контрафактный продукт нельзя.
« Последнее редактирование: 05 Июнь 2008, 14:11:54 от pskovgrad »

Оффлайн jmur

  • Активист
  • *
  • Сообщений: 350
    • Просмотр профиля
про слип я так и не понял, при чём тут медленная сеть?
всем читать http://www.opennet.ru/docs/RUS/bash_scripting_guide/

Оффлайн graddata

  • Автор темы
  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1772
  • BIGCloud
    • Просмотр профиля
не медленная, а тормознутая. Лучше поспать немного и всё сработает, чем быстро и не фига.
В моём случае $slep это хорошая и нужная команда.

Оффлайн jmur

  • Активист
  • *
  • Сообщений: 350
    • Просмотр профиля
что происходит с сетью за эти 5 сек, я правда не понимаю :(

Оффлайн Sebastian Gonsales

  • Участник
  • *
  • Сообщений: 173
  • null
    • Просмотр профиля
Зачетная хаутушка. Мне понравилось.. :) Но про 5 секунд действительно лишнее. Этож не виндовс ;D

Оффлайн graddata

  • Автор темы
  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1772
  • BIGCloud
    • Просмотр профиля
thedarklord
спасибо, сам радуюсь, что могу себе облегчить труд.

Ладно, забейте на эти 5 секунд, пусть это будет просто моя параноя. Ну вообще прикольно, с задержкой баловаться.
Я так с созданием ярлыков на рабочем столе придуривался. Забавно, кода вдруг что то начинает появляться на рабочем столе. ))))

А так ещё в скрипт нужно дописать chmod, тк папки и прочие файлы создаются с правами рута.

Оффлайн jmur

  • Активист
  • *
  • Сообщений: 350
    • Просмотр профиля
в скрипте следующая комманда не выполняется пока предыдущая не закончит. Так что эти задержки не нужны. А если тебе скрипт (не этот конкретно, а любой другой) много сотен раз придётся вызывать, представь как это всё затянется.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Автор просто соня :)

Идея стара как мир, но вот реализация какая-то ламерская.

1) Зачем в домик пользователю помещать скрипт который будет запускаться от рута ? Проблем захотели ? Или вы запретите пользователю создавать в домике файлы и каталоги ? Такие вещи надо помещать в /etc/init.d или прямым текстом в /etc/rc.local
2) Если пользователь по каким-то причинам будет грузится несколько раз, то и скрипты будут запускаться столько-же раз. Надо контролировать успех и удалять подсадку. Может я не заметил ?
3) скрипт или каталог, который будет скачиваться/запускаться надо именовать по IP или другому идентификатору станции. В этом случае можно иметь в /etc/rc.local идентичные строки или в /etc/init.d/ идентичные скрипты. У меня, например монтируется NFS раздел общий всеми и не надо на каждом клиенте исправлять цифирь.

...Это то, что сразу бросилось в глаза.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
А так ещё в скрипт нужно дописать chmod, тк папки и прочие файлы создаются с правами рута.
Вот это как раз погоды не делает.

Оффлайн graddata

  • Автор темы
  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1772
  • BIGCloud
    • Просмотр профиля
S.Tokarev

согласен, что идея стара, но не нашёл её решения вывешенного в общий доступ, поэтому и вот поделился свей инструкцией. Писал её изначально для себя, что бы самому не забыть. Да и что бы ещё не трогали колеги по работе часто, "мол пока и покажи"

1 - Это при конкретной задаче решается, где будет храниться запускающийся скрипт. Согласен, что лучше его спрятать в /etc/init.d, хотя сразу в /etc/rc.local даже мне лучше нравиться, хотя тут в крайнем случае не запустишь его вручную сходу.
2 - пользователь не будет грузиться несколько раз. Как раз смысл скрипта, что бы юзер включил ПК утром придя на работу и получил все обновления. А шаа спустя 2 часа закрывается или просто папка с скриптом на сервере переименовывается. И всё, скрипт не будет выполняться. в крайнем случае, телефонный звонок это проще чем дойти до него, и попросить юзера перезагрузиться.
3 - не очень понял, но сервер хранения запуска файлов у всех  машин один и тот же. те и скрипт все запускают одинаковый.

4 - ладно, всё понял про ошибку с спящим режимом,.учту.

А так, каждый всё равно будет его использовать, как ему удобно. Возможно даже кому нибудь не нужны будут вообще права на рута для его скриптов.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
3 - не очень понял, но сервер хранения запуска файлов у всех  машин один и тот же. те и скрипт все запускают одинаковый.
В этом случае все клиенты должны быть одинаковыми. Если так и надо, то всё пучком.
Я делаю так:
Создаётся скрипт для некоторой группы станций. Но каждая станция тянет свой индивидуальный скрипт /path_to/<IP>.sh
А каждый /path_to/<IP>.sh - ссылка на файл соответствующий определённой группе по конфигурации.
Например конфиг иксов зависит от железа
создаём по одному конфигу на каждое железо:
/path_to/hardware/x500.xorg.conf
/path_to/hardware/S3.xorg.conf
И ссылками распределяемв зависимости у кого что стоит:
/path_to/192.168.0.1.xorg.conf -> /path_to/hardware/x500.xorg.conf
/path_to/192.168.0.2.xorg.conf -> /path_to/hardware/x500.xorg.conf
/path_to/192.168.0.3.xorg.conf -> /path_to/hardware/S3.xorg.conf
/path_to/192.168.0.4.xorg.conf -> /path_to/hardware/S3.xorg.conf
/path_to/192.168.0.5.xorg.conf -> /path_to/hardware/x500.xorg.conf
Каждая утянет как-бы свой файл, но который соответствует её железу.
Изменению же подлежать будет всего пара файлов. Ссылка соответствующей станции поменяется только при переводе станции на другой конфиг.

Оффлайн graddata

  • Автор темы
  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1772
  • BIGCloud
    • Просмотр профиля
О, я тебя понял. :)
В моём случае, все действия скрипта не требуют спецификаций железа, те им всё равно какое оно.

Я просёк твою мысль, очень даже понравилось.  :D  Позже ею воспользуюсь, а пока что мне требуется только обновить ко деки к примеру и разолать материал какой нибудь. И прочие по мелочи операции.

Оффлайн S.Tokarev

  • Активист
  • *
  • Сообщений: 415
    • Просмотр профиля
Дык всё придумано до нас.
Посмотри статьи по бездисковой загрузке. Там не такие вещи делают. Компы полностью загрузку тянут с сервера. Хоть скрипты хоть конфиги.

Оффлайн graddata

  • Автор темы
  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1772
  • BIGCloud
    • Просмотр профиля
хорошо.
Но это уже терминальный клиент получается.  ;D
« Последнее редактирование: 06 Июнь 2008, 17:58:30 от pskovgrad »

Оффлайн graddata

  • Автор темы
  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1772
  • BIGCloud
    • Просмотр профиля
хм, а вот интересно, что написать в скрипт, что бы он панели добавлял на рабочем столе.
Искал эти файлы по панелям, не нашёл. Где всё таки они хранятся точно?  ???
Я понимаю, что они в /home/*/.local/share/ но вот точнее бы. ??? ???

 

Страница сгенерирована за 0.059 секунд. Запросов: 24.