`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Андрей Зубинский

Старый нетбук, Xubuntu (или любая из *buntu), Docker, «проект на вечер»

+99
голосов

Считайте это продолжением записи с похожим названием, но продолжением в стиле «хитрого прыжка» – вместо унылого обсуждения деталей мы сразу прыгнем в нечто совершенно практическое, причём сделаем это почти без всяких усилий.

Задача, решаемая в этой записи блога, предельно проста – избавиться от зависимости от не очень хорошо предсказуемых сервисов чтения rss-новостей, причём с минимальными и необязательными разовыми затратами (на Android или iOS клиент) вместо ежемесячной оплаты чтений блогов сервисов в стиле «нас опять DDOS-атаковали» или «у нас сервисное обслуживание».

Объяснюсь, почему выбрал именно эту задачу.

По моему скромному мнению, для rss-новостей заменителя не придумали. Twitter слишком малословен, и в нём заголовок должен ещё сопровождаться ссылкой, в итоге - сгенерированные заголовки новостей в нём кошмарны и для негуманоидов, а нанимать стада «чирикающих» людей, способных прочитать, понять и красиво уложить суть новости в 120 символов (что адский труд, большой талант и потому очень недёшево), – не по деньгам никому. Соцсети чудовищно перегружены красотами вебдванолья, но не это главное – в них нет реально удобного механизма группирования многочисленных «каналов» в множество групп (да они по сути для строго противоположного), и его пока никто не придумал. Электронная почта для оперативных новостей архаична (хотя до сих пор непревзойдённая для «самого главного за приличный интервал времени», что не теряет актуальности, скажем, за неделю). В общем, аудитория против всего этого проголосовала деньгами, хлынув в альтернативные закрытому Google «ридеру» сервисы. Разработчики же этих сервисов… Они или копируют привычный и удачный (был бы неудачным – и не был бы привычным, и не копировали бы) интерфейс Google Reader, или, извините, соревнуются в неадекватности. То какие-то квадратные «плитки» с микроподписями, предполагающие обязательное наличие «картинки» в новости и орлиного зрения читателя, то вообще «шарики» (OMFG), то трёхмерное что-то (вызывающее хтонический ужас на двумерном экране), в общем, ставить на себе чужие эксперименты – это прекрасно, но для ценителей BDSM-культуры (ничуть их не осуждаю, кстати, просто не являюсь таковым).

Вот и научим старого пса новым трюкам. Нетбуки потребляют почти ничего электроэнергии, очень надёжны (достоинство всех хилых вычислителей), выбросить их жалко, продавать – смешно, дарить – унизительно и унижающе, в общем, идеальные так и не отработавшие своё машинки (появились во время полной неготовности всех – ни Microsoft не могла дать адекватной возможностям этих машинок системы, ни Linux ещё не была вменяемой в начале становления короткой «нетбучной волны»), и их надо бы куда-то пристроить.

Теперь ситуация изменилась – Windows восьмой ветки уже по озвученному мнению Microsoft получилась «ни для чего», и потому уже анонсирована девятая ветка, которая наконец опять будет похожа на всё равно тяжёлую для нетбуков седьмую (я о нетактильных экранах говорю), а Linux всё-таки доросла до пригодности и практической безболезненности, особенно на обкатанном старом, распространённом, но неплохом, «железе».

Так что нетбук, XFCE-дистрибутив (Xubuntu), Docker, немного времени, и строим свой сервис rss-новостей, ни от кого (кроме провайдера и облэнерго) не зависящий.

За время, прошедшее с первой записи, кое-что радикально изменилось – Docker доросла до финальной версии, «релиза», и даже «запрыгнула» за неё. Правда, репозитории ПО до сих пор с опаской относятся к этому факту, и поддерживают старые версии (менее заветной «единички»). Нас это не устраивает. Тем более, что в Docker потрудились и упростили всё до натурального однокомандного безобразия.

В общем, я предполагаю, что все необходимые условия у вас есть, и начинаем с легальной (во всех смыслах) установки самой свежей версии Docker, минуя репозитории.

Проверьте, есть ли в вашей системе мелкая и полезная утилита curl (по умолчанию в Xubuntu, например, её нет):
whereis curl
Если нет – установите её: sudo apt-get install curl
И сразу устанавливаем Docker:
curl -s https://get.docker.io/ubuntu/ | sudo sh
Проверяем, всё ли нормально (это паранойя) и есть ли в системе стартовый файл Docker: sudo less /etc/default/docker
Если он есть, пейджер less покажет текстовое содержимое файла, начинающееся с комментария #Docker Upstart…, этого достаточно, нажимаем Q.
Смотрим, запущен ли процесс docker (опять паранойя):
ps –A | grep ‘docker’
Должен быть запущен.
Запоминаем - пока реально выполнено одно инсталляционное действие (прочее – необязательно).

Если по каким-то причинам нет желания использовать будущий сервис в окружении текущего пользователя, производим небольшой ряд банальных действий (разве что пара из них стоит упоминания, но всё же). Следующий фрагмент (до «Собственно, это всё») совершенно необязательно выполнять, если вас устраивает текущий пользователь.

Создаём нового пользователя:
sudo adduser _какое_нравится_имя_
Заполняем что требует диалог команды (разумно без всяких опциональных деталей, запросы на ввод которых идентифицируются парой скобок []).
Проверяем, какие группы вообще представлены в системе, и ищем, есть ли группа docker (ещё раз паранойя):
getent group
Просматриваем результат. Если ваша машина «напичкана» вами же (или разработчиками дистрибутива) всякими сервисами, вывод команды может быть большим, и чтобы не листать и не выискивать глазами, можно сразу проверить наличие группы docker в результате, так что этот пункт на ваш выбор – или упрощённо, или вот так:
getent group | grep ‘docker’
Добавляем пользователю _какое_нравится_имя_ (он совершенно обычный) возможность использовать привилегированные ресурсы системы с помощью команды sudo:
sudo visudo
Префикс «vi» этой команды в случае Xubuntu разве что напоминает о классике, команда запускает редактор nano с открытым файлом /etc/sudoers.tmp. В нём найдите строку, начинающуюся с комментария «#User privilege specification» и добавьте после обязательной строки под ним root… следующее:
_какое_нравится_имя_ ALL=(ALL:ALL) ALL
Выполните запись в файл /etc/sudoers (без .tmp – расширения!) – Ctrl-O c последующим удалением из имени файла ненужного расширения, затем выход из visudo (в реальности nano) – Ctrl-X.
Дело за малым – добавить этого пользователя в группу docker:
sudo usermod -a -G docker _какое_нравится_имя_

Собственно, это всё. Можно сменить текущего пользователя (или ничего не делать лишнего, если вы не заводили нового пользователя) и выполнить катастрофически сложную процедуру инсталляции целого сервиса Tiny Tiny Rss, которая состоит из выполнения всего двух команд.

Первая делает всё, что нужно, для создания и запуска контейнера, содержащего настроенную СУБД PostgreSQL:
docker run -d --name ttrssdb nornagon/postgres
Надо немного подождать (и понаблюдать за выводом команды), потому что объёмы загружаемого будут приличными.

Вторая команда развёртывает всё, что нужно для работы собственно Tiny Tiny Rss – полный стек (web-сервер nginx, среду PHP5 со всем необходимым, систему контроля версий git, самую «свежую» версию Tiny Rss и кой-какие мелочи):
docker run -d --link ttrssdb:db -p 80:80 clue/ttrss

Я не буду даже расписывать смысла этой команды, ограничусь сведением – через «внешний» мир реальной машины к этому контейнеру можно «достучаться» через (естественно, IP-адрес самой машины) порт 80, если вас это не устраивает по каким-то причинам, вы можете изменить этот порт с использованием шаблона:
docker run -d --link ttrssdb:db -p _порт_реальной_машины_:80 clue/ttrss

Итак, после выполнения всего двух этих команд вы можете выполнить docker ps и посмотреть, какие контейнеры запущены и работают. Их должно быть два, естественно – в одном упрятана PostgreSQL, во втором – стек Tiny Tiny Rss.

Если всё выглядит как должно (каких-то серьёзных причин я не вижу почему это может быть не так), то запускайте пока локальный браузер (на той же машине, где вы всё это делаете) и «натравливайте» его на адрес http://localhost.

Пользователь-пароль по умолчанию – admin/password. Вводим их (если браузер запрашивает, надо ли сохранять данные логина – лучше пока не надо) и попадаем в основной интерфейс Tiny Tiny Rss.

По классике, первая задача настройки – изменение пароля администратора. Если вы не собираетесь «выпускать» свой «Tiny Tiny Rss сервис» за пределы своей же домашней сети – можно даже обойтись без паранойи, но культура есть культура. Выбираем в верхнем правом углу интерфейса Actions, и в выпавшем меню – Preference.

Навигация в настройках Tiny Tiny Rss осуществляется по «лентам» секций, выбираем Personal data/… и заполняем что там надо заполнить, включая поля обновления пароля (не забываем, что текущий пользователь – администратор, и что Tiny Tiny Rss – это сервис, он многопользовательский, и это важный нюанс, о нём чуть позже). Административный аккаунт – далеко не лучшее, что можно использовать для повседневной бытовой работы, нам понадобится добавить обычного пользователя, поэтому для «чистоты эксперимента» сохраняем новый пароль администратора: выбираем ленту Preference, сохраняем текущую конфигурацию (кнопкой Save configuration), выходим из режима редактирования настроек (Exit preference) и полностью покидаем Tiny Tiny Rss (ActionsLogout).
Повторяем вход в Tiny Tiny Rss администратором с новым паролем (и вот теперь браузеру можно разрешить его запомнить), опять выбираем настройки и в табовом интерфейсе активируем таб Users.

Добавление пользователя очевидно (Create user в меню – и дальше по навязываемым действиям), разве что советую для персонального сервиса выбирать уровень доступа Power User. Сохраняем настройки (Preference Save Configuration), делаем Logout и повторяем вход в Tiny Tiny Rss теперь уже только что созданным пользователем. И опять заходим в настройки, выбираем интересующий интервал обновления фидов (в Preference Default feed update interval) и, самое главное, если собираемся использовать планшет (и/или смартфон – но это при «выставлении» Tiny Tiny Rss за пределы домашней сети, зачем читать новости дома со смартфона?) для чтения новостей – надо обязательно для обычного пользователя, с данными которого (имя/пароль) вы будете "заходить" на свой сервис с планшета или смартфона, включить API-доступ к Tiny Tiny Rss. Это включение работоспособно именно для каждого конкретного пользователя, только из административного аккаунта его недостаточно.

Сохраняем настройки.

Что делать дальше – ответ на этот вопрос зависит от того, с чем вы имели дело раньше.

Немного скажу о самом распространённом сервисе – Feedly, который за последние несколько недель ещё и умудрился получить титул самого annoying.

Экспортируем из Feedly ompl-файл своих «подписок». Находим меню настроек Feedly (три точки в панели слева), выбираем Organize, внизу страницы будет маленькая ссылочка Save as OMPL, она и нужна.

Дальше – новая страница со всего одной «кнопкой», и сохранение локального файла. Именно этот файл и нужно загрузить в Tiny Tiny Rss из соответствующих диалогов.

Не забываем сохранить настройки, и, собственно, с «сервисной частью» это всё. Проверяем локальную работу Tiny Tiny Rss – всё уже должно работать и rss-лента должна читаться почти в добром старом привычном формате почившего Google Reader.

Теперь давайте сделаем маленькое отступление, позволяющее понять, почему все так «ухватились» за Docker, и почему это действительно гениальная разработка, что большая редкость в наши времена «инноваций». Давайте вообще сделаем Logout из Tiny Tiny Rss и вернёмся к консоли.

Посмотрим командой docker ps какие контейнеры у нас «бегают».

Весь очень непростой в инсталляции сервис Tiny Tiny Rss «фактически» уместился в две сущности, создаваемых всего двумя командами (само собой, кто-то перед этим потрудился, но я бы не сказал, что это был титанический труд). У этих сущностей есть глобальные уникальные идентификаторы (CONTAINER ID) и локальные, от запуска к запуску контейнера изменяемые и генерируемые Docker имена – NAMES. Команды Docker могут использовать и то, и другое, теперь вы можете остановить исполнение контейнера clue/ttrss (docker stop _идентификатор_или_имя_), перезапустить контейнер той же командой, которая была уже использована (при этом он стартует почти мгновенно, потому что всё ему нужное уже есть локальное) и выполнять ещё море действий, которые относятся к deployment. Советую теперь «погулять» по файловой системе вашей машины – она девственно чиста от всего «технологического» мусора, сопутствующего развёртыванию груды программных систем, входящих в состав Tiny Tiny Rss. Если в вашей системе не было PHP, его и нет. Всё осталось как было. Можете убедиться в этом. Docker всё упрятал, причём в, грубо говоря, «дельты» к реальной файловой системе. Что ещё лучше, – разработчики контейнеров PostgreSQL и Tiny Tiny Rss даже не знакомы друг с другом и не делали эти контейнеры «в паре», под одну задачу. А Docker, как огромный уже сервис, обеспечивает и пространства имён (пользователь/проект, например, clue/ttrss), и хранение в этом пространстве файлов управления процессом deployment контейнеров, и бинарные образы контейнеров, и массу всякого ещё, что в итоге всего двумя командами полностью освободило вас от развёртывания и настройки кучи программных систем, а вашу машину – от моря «хлама» в файловой системе, и, тем самым, от печально известной и до сих пор никуда не девающейся проблемы с версиями динамически загружаемых библиотек (символично, что Docker реализован на языке Google Go, в котором эта проблема решена единственно возможным радикальным до экстремизма способом).

Пора перейти к планшету (смартфону). Я говорю об Android-устройствах, для iOS, по-моему, всё то же самое. У проекта Tiny Tiny Rss есть свой мобильный rss-ридер, предназначенный для работы с сервисом. Устанавливаем его. Настраиваем – настройки минимальны, пользователя и его пароль мы уже знаем, потому что сами создавали его, сетевой адрес машины или домашней сети – тоже (ну не могу я расписывать все нюансы с «пробросом» портов роутером, с DNS и прочим, включая ssh туннели или VPN, за меня это сделали тысячу раз), остальное там очевидно.

Итак, это первый шаг к чему-то реально полезному от Docker «в быту». Есть ещё масса разных полезных решений, в том числе и отсутствующий пока в репозитории Docker «безголовый» (headless, вообще без GUI) сервер Calibre – менеджера персональной библиотеки, но это уже много сложнее, чем фактически двухкомандная инсталляция, мы и до этого доберёмся.

Результат же этой небольшой записи – ваш персональный rss-ридер-сервис, не зависящий от DDOS-«разборок» между дерущимися за рынок читателей сервисами, бесплатный и более чем работающий. Я пользуюсь им в режиме «новости – дома», когда я вне дома, обычно я или что-то достаточно важное делаю, или общаюсь, или отдыхаю, ни в одном из случаев новостные ленты мне не нужны. Это, кстати, тоже мелкий, но важный психологический фактор.

Надеюсь, кому-то это совершенно потешное в усилиях, но очень приятное в результатах, пригодится.

Откланиваюсь.

PS

Мне пришлось отказаться от скриншотов. При горизонтальном разрешении 430 пикселов они абсолютно бесполезны, да и в полном размере практически бессодержательны, интерфейс Tiny Tiny Rss абсолютно "прозрачный", единственный "подводный камень" (с персонификацией доступа к API) я выделил в тексте.

+99
голосов

Напечатать Отправить другу

Читайте также

Опубликовано в 0:20... Может Вы и Бразилия-Германия не смотрели?!

я к футболу совершенно равнодушен, не смотрю вообще

И напрасно, конечно на фоне событий в стране, все это поблекло, но футбол на таком уровне - драма в чистом виде, причем live.

в жизни драм хватает, каждый день - новая :)
ну неинтересно, и очень давно

А что за "проблема" с shared libs? Ни разу не сталкивался.

наверное, вам везло, и не попадались наборы приложений с разными требованиями к версиям одной и той же (или группы) библиотек

А что вы скажете на счет планшетов на 4-ядерных атомах (которые китайцы уже накопировали предостаточно) как замене нетбуков? на скольно их хватит...

имел дело с несколькими, из неплохих
10-дюймовые, с IPS retina-экраном (что-то там 2500x1600 примерно)

экран - роскошный, без малейшего сомнения (вот с таким бы экраном - да тонкий ARM нетбук под Linux, ммм)
а вот в целом - есть много проблем
экономят на всём, скрытом от пользователя и неочевидном для не очень опытного пользователя

главная проблема - экономия на быстрой флэш-памяти. сколько бы ни было заявлено "общего объёма" флэша, быстрая (системная) память будет маленькой, вся прочая - медленная, по сути - встроенная и далеко не лучшая карта памяти

в итоге - быстрой системной памяти катастрофически не хватает, а далеко не всё с внешней флэш-памятью работает так, как хочется

кроме того, сверхразрешение экрана - это ещё и затраты оперативной памяти. и все машинки с такими экранами, по идее, должны иметь минимум 4 гига RAM. ну надо им. чудес не бывает, если что-то рендерится в растр с таким разрешением, причём рендерится упреждающе (что абсолютная норма для мобильных интерфейсов, это обеспечивает "плавность") - нужно очень много памяти под буферы и очень "жирный" канал, позволяющий эти буферы перебрасывать видеоподсистеме. а у мобильных ARM SOC адресуемая память, если мне не изменяет маразм, большая проблема, выше 2GB я не видел.

в общем, пока увы.
если китайцы перестают экономить на малозаметном (на этапе покупки), цена их почти noname устройств становится сравнимой с ценой брендовых (а то и выше), просто потому, что чудес не бывает и быть не может.

7-дюймовые делать научились. тот же Ainol. но особого смысла в них после Nexus 7 2013 я не вижу, экономия не настолько существенная, чтобы "ах!". не отвергаю ничуть - если кому-то действительно жалко разницы, то вполне годится.

посмотрим ещё.
что-то мне подсказывает, что упущенный Microsoft период (а Surface'сы - это провал, в нижней ценовой категории они кошмары, а в верхней никому не нужны, смысла в них нет за такие деньги) к осени откликнется чем-то новым, и именно в области "бюджетных ультрабуков с ограниченными возможностями", c не полностью "браузерными" ОС, просто с "усечёнными" дистрибутивами.
логика подсказывает, что это очень удобный для всех путь.
но посмотрим, насколько я прав.
пока это вероятностная оценка.

Ну а так нетбуки v2, а-ля Asus T100, это оно и есть? RAM бы ему побольше и совсем хорошо было бы.

Я не буду даже расписывать смысла этой команды, ограничусь сведением – через «внешний» мир реальной машины к этому контейнеру можно «достучаться» через (естественно, IP-адрес самой машины) порт 80, если вас это не устраивает по каким-то причинам, вы можете изменить этот порт с использованием шаблона:
docker run -d --link ttrssdb:db -p 80:_порт_реальной_машины_ clue/ttrss

Тут наоборот:
docker run -d --link ttrssdb:db -p _порт_реальной_машины_:80 clue/ttrss

ох, извините, да, очепятка
исправлю сейчас, спасибо

вам спасибо за статью

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT