Поиск по этому блогу

понедельник, 29 июня 2015 г.

Ubuntu обновление пакетов

Будит описано банальное обновление пакета/ов, по которому есть сотни мануалов и HOWTO. Для продвинутых пользователей ничего нового и интересного, наоборот, может присутствовать некоторый дискомфрт от написанного :). Но т.к. опыт работы с убунту небольшой мне пришлось углубиться в чтение манов.
Итак имеется
#uname -a
Linux atos-pc 3.16.0-23-generic #31-Ubuntu SMP Tue Oct 21 17:56:17 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Потребовалось обновить ядро (вышел новый релиз безопасности, той же ветки) и некоторых пакетов (все по той же причине).

Перед каждым обновлением или установкой пакетоврекомендуется делать apt-get update

В Ubuntu обновить пакет можно несколькоими способами:
-apt-get upgrade - Обновляется все установленные пакеты или пакет (если указан) и его зависимости. Установленные пакеты не удаляются. Новые версии уже установленных пакетов, которые не могут быть обновлены без изменения статуса установки другого пакета останутся в своей текущей версии.
-apt-get dist-upgrade - впринципе тоже, что и upgrade только более "умно" работает с зависимостями и может удалять пакеты
-apt-get install <имя пакета> - обновит только конкретный пакет до более свежей версии
-apt-get install --only-upgrade - делает тоже, что и предыдущий. Обновляет только конкретный пакет, никакие зависимсоти не трогает (в чем разница так и не понял). (данным способом и производил обновление)

Мне пригодилась такая конструкция, для понимания в каком состоянии окажется система после обновлени тем или иным способом
apt-get -o APT::Get::Simulate=Yes -o APT::Get::Show-Upgraded=Yes <способ> <имя пакета>
# apt-get  -o APT::Get::Simulate=Yes -o APT::Get::Show-Upgraded=Yes dist-upgrade curl
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Расчёт обновлений…Готово
НОВЫЕ пакеты, которые будут установлены:
  linux-headers-3.16.0-41 linux-headers-3.16.0-41-generic linux-image-3.16.0-41-generic linux-image-extra-3.16.0-41-generic
Пакеты, которые будут обновлены:
  apport bind9-host bsdutils ca-certificates cgmanager command-not-found command-not-found-data cpio curl dbus dnsutils dpkg e2fslibs e2fsprogs file fuse gir1.2-gtk-3.0 gnupg gpgv isc-dhcp-client
  isc-dhcp-common krb5-locales landscape-common libbind9-90 libblkid1 libc-bin libcgmanager0 libcomerr2 libcups2 libcurl3 libcurl3-gnutls libdbus-1-3 libdns100 libelf1 libevent-2.0-5 libfreetype6
  libfuse2 libgcrypt11 libgcrypt20 libglib2.0-0 libglib2.0-data libgnutls-deb0-28 libgnutls-openssl27 libgssapi-krb5-2 libgtk-3-0 libgtk-3-bin libgtk-3-common libicu52 libisc95 libisccc90
  libisccfg90 libk5crypto3 libkrb5-3 libkrb5support0 libldap-2.4-2 liblwres90 libmagic1 libmount1 libnuma1 libpam-systemd libpolkit-agent-1-0 libpolkit-backend-1-0 libpolkit-gobject-1-0
  libprocps3 libpython2.7 libpython2.7-minimal libpython2.7-stdlib libpython3.4 libpython3.4-minimal libpython3.4-stdlib libsmartcols1 libss2 libssl-dev libssl-doc libssl1.0.0 libsystemd-daemon0
  libsystemd-journal0 libsystemd-login0 libtasn1-6 libudev1 libuuid1 libxext6 libxrender1 linux-firmware linux-generic linux-headers-generic linux-image-generic linux-libc-dev lshw mercurial
  mercurial-common mime-support mount mountall multiarch-support ntpdate openssl patch policykit-1 ppp procps python-requests python2.7 python2.7-minimal python3-apport python3-commandnotfound
  python3-distupgrade python3-problem-report python3.4 python3.4-minimal rsyslog sudo systemd systemd-shim tcpdump tzdata ubuntu-release-upgrader-core udev unattended-upgrades util-linux
  uuid-runtime wpasupplicant
обновлено 122, установлено 4 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Inst bsdutils [1:2.25.1-3ubuntu4] (1:2.25.1-3ubuntu4.1 Ubuntu:14.10/utopic-updates [amd64])
Conf bsdutils (1:2.25.1-3ubuntu4.1 Ubuntu:14.10/utopic-updates [amd64])
Inst dpkg [1.17.13ubuntu1] (1.17.13ubuntu1.1 Ubuntu:14.10/utopic-updates [amd64])
Conf dpkg (1.17.13ubuntu1.1 Ubuntu:14.10/utopic-updates [amd64])
Inst e2fslibs [1.42.10-1.1ubuntu1] (1.42.10-1.1ubuntu1.2 Ubuntu:14.10/utopic-updates [amd64]) [e2fsprogs:amd64 on e2fslibs:amd64] [e2fsprogs:amd64 ]
Conf e2fslibs (1.42.10-1.1ubuntu1.2 Ubuntu:14.10/utopic-updates [amd64]) [e2fsprogs:amd64 ]
Inst e2fsprogs [1.42.10-1.1ubuntu1] (1.42.10-1.1ubuntu1.2 Ubuntu:14.10/utopic-updates [amd64])
s [amd64])
Conf libsmartcols1 (2.25.1-3ubuntu4.1 Ubuntu:14.10/utopic-updates [amd64])
.........

APT::Get::Show-Upgraded=Yes - покзывать обновляемые пакеты, выводить список всех пакетов, которые будут обновлены.
APT::Get::Simulate=Yes - производит симуляцию событий, которые будут происходить, но никакие изменения в системе сделаны не будут.

Чтобы посмотреть список пакетов, которым необходимо обновление можно использовать apt-show-versions - она показывает, какие пакеты в системе можно обновить и еще некоторую полезную информацию. Опция -u отображает список обновляемых пакетов:
root@pc:~# apt-show-versions -u
linux-generic:amd64/utopic-security 3.16.0.23.24 upgradeable to 3.16.0.44.44
linux-headers-generic:amd64/utopic-security 3.16.0.23.24 upgradeable to 3.16.0.44.44
linux-image-generic:amd64/utopic-security 3.16.0.23.24 upgradeable to 3.16.0.44.44

Использованные источники:
-man apt-get
-APT HOWTO
-Unix Toolbox

среда, 24 июня 2015 г.

scp копирование без пароля (по ключу)

имеется
#uname -a
Linux atos-pc 3.16.0-23-generic #31-Ubuntu SMP Tue Oct 21 17:56:17 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
#
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.10
Release:        14.10
Codename:       utopic
#
# cat /etc/debian_version
jessie/sid

хочу настроить копирование на удаленную машину без запроса пароля (использование пары ключей)

создал пару ключей ssh-keygen -t rsa, скопировал закрытый ключ на локальной машине в папку пользоваль/.ssh/, на удаленной машине открытый ключ скопировал пользоваль/.ssh/authorized_keys

В /etc/ssh/sshd_conf на локальной машине: расскоментировал PubkeyAuthentication yes,
На удаленной машине: AuthorizedKeysFile     %h/.ssh/authorized_keys, PubkeyAuthentication yes
%h - домашний каталог пользователя

копирую таким образом
scp -i /root/.ssh/id_dsa -v   /home/user3/test_file root@10.1.1.11:/home/user
-i - указывает где лежит закрытый ключ на локальной машине
-v - делает многословный вывод. удобно при тестировании, особено совместно с опцией -d

В таком виде его можно и в cron запихать
*/5 * * * * /usr/bin/scp -2 -B -r -i /root/.ssh/id_dsa -v /etc/freeradius/mac_db root@10.1.1.11:/home/user
производить копирование каждые через каждые 5 минут (12:00, 12:05, 12:10 и т.д.)
5 * * * * /usr/bin/scp -2 -B -r -i /root/.ssh/id_dsa -v /etc/freeradius/mac_db root@10.1.1.11:/home/user
запуск каждые 5 минут каждого часа (12:05, 13:05, 14:05 и т.д.)

Простой скрипт без всяких проверок, на наличие файлов, их изменение и т.д. (не умею пока этого делать). Просто копирование в различные места /home/user/scp_script
#!/bin/bash
for i in user user1 user2 user3 user4
do
/usr/bin/scp -r -v -B  -i /root/.ssh/id_dsa  /etc/freeradius/mac_db root@10.1.1.11:/home/$i/
done


Если возникнут такие ошибки

debug1: Found key in /root/.ssh/known_hosts:3
debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering DSA public key: /root/.ssh/id_dsa
debug1: Authentications that can continue: publickey,password
debug1: No more authentication methods to try.
Permission denied (publickey,password).
lost connection

Необходимо провеирть права на папку /.ssh и файл authorized_keys на удаленой машине. Должны быть владельцами "пользователи" в директорию которых они скопированы (для user1 - пользователь1, для root - и т.д.)

Если настройка нового ssh сервера производилась клонированием настроек со старого, то необходимо перегенерировать все ключи в папке /etc/ssh:
  • Удаляем старые ssh ключи: rm /etc/ssh/ssh_host_*
  • Переконфигурируем OpenSSh Server: dpkg-reconfigure openssh-server
  • Обновляем всех ssh клиентов: ~/.ssh/known_hosts files

  • При необходимости перезапустить ssh используем invoke-rc.d ssh restart
    При перегенерировании новых ключей текущая ssh сессия не должна быть прервана

    Полезно для ознакомления Теория и практика использования SSH, crontab, wiki.debian.org
    Наглядная табличка по cron, чтобы не забыть