Комментарии 181
Да, на Линуксе не бывает вирусов. Поэтому, я предусмотрел установку антивируса.
Ну и зачем тогда он в скрипте? Зачем изначально формировать ложный список must have ПО?
Большое спасибо за труд! Действительно, полезная вещь, сам тоже часто не знаю\забываю, как сделать какую-то вещь, правда CentOS еще не использовал.
Но выкладывать такое полотно на хабр для копи-паста, наверное, не самый удобный способ распространения. Лучше, если вы загрузите на Github.
Осталось найти время. :)
Публикация в опен-сорс (на гитхаб, например) как раз тем и крута, что если времени нет, то оно с некоторой долей вероятности найдётся у других участников сообщества, и вам только нужно будет аппрувить пулл реквесты.
menu="Может всё же какой-нибудь dialog лучше или аналог?
┌─────────────────────────────────────────────┐
│ $title $ver$space│
├───┬─────────────────────────────────────────┤
│ 1 │ Информация о системе │
├───┼─────────────────────────────────────────┤
│ 2 │ Работа с ОС │
├───┼─────────────────────────────────────────┤
│ 3 │ Установить панель управления хостингом │
Так или иначе это код менялся и дополнялся на протяжении последних 9-10 месяцев. Уверен, еще через полгода он будет другим. Будет больше радовать тех, кто вообще плохо разбирается в Линуксе. И будет меньше резать глаза «тру кодерам». :)
Только перед этим мне придется достаточно много часов потратить на изучение соответствующих материалов.В том-то и дело, что не придется. dialog или его аналог все сделает за вас.
Пробегите глазами код Winetricks.
whiptail куда лучше.
В реальности же, это не так, и такие сервера с впсками с удовольствием используют для рассылки спама и ddos, потому что такие штуки, даже если всё правильно настраивают, то только то, для чего созданы, и не отменяют необходимости настроить всё остальное, и, что очень важно, следить за всем настроенным.
Ну и до кучи они «отменяют» необходимость хотя бы минимально разобраться как должно работать настраиваемое, и покопаться в документации.
Желающим попользоваться — одумайтесь! Либо разберитесь в том, чем будете пользоваться, либо купите готовую услугу, либо наймите кого-нибудь, чтобы сделать хорошо, как нужно вам. Нет других путей — такие скрипты всегда путь к проблемам, даже если автор хотел как лучше.
Я конечно не поставлю такие вещи к себе на сервере… НО! Скрипт просто «прелесть» для изучения! Автору респект!
Что же с нами стало. Детский сад какой-то. Бложиг программистов.
Ну и полезно бы тоже было, чего уж там.
Особенно в ansible кросс-дистрибутивны модули yum/apt/dnf/pacman/zypper, да. Это даже не вспоминая о том, что в разных дистрибутивах пакеты могут называться существенно по разному: где-то apache2, где-то — httpd. Иногда и в рамках одного дистрибутива разных версий бывает каша, например, в centos/rhel 6-7 были docker-io, docker, docker-engine, которые, по сути, являются одним и тем же продуктом.
А с докером — это их завтык. Везде у них так.
Никто не мешает использовать условия на версию и дистрибутив.
Равно как и самописном скрипте, в общем.
А с докером — это их завтык. Везде у них так.
Это просто не хипстерский (в плохом смысле этого слова) подход. Если в репозитории rhel6/centos6 уже есть пакет docker
(это какой-то док для wm/de в рамках x11), то никто не будет новый пакет называть также и выкидывать старый в рамках одной major версии дистрибутива. Банальная обратная совместимость. Точно также происходит во всех более-менее нормальных дистрибутивах: centos/fedora/rhel, debian, ubuntu — как минимум. У большинства, правда, lts немножко меньше 10 лет.
То, что докеровцы в какой-то момент переназвали кусок, который ныне именуется docker-engine — их личное дело. И мейнтейнеры дистрибутивов в этом не виноваты.
А разнообразие имен пакетов аккуратно оформляется в «рецепте», знания о том, какой дистрибутив доступно.
Про ansible не знаю, но у salt stack управление пакетами кросс-дистрибутивно.
А разнообразие имен пакетов аккуратно оформляется в «рецепте», знания о том, какой дистрибутив доступно.
Я знаком с этим подходом по chef'у. У ansible просто более явная модель. Обычно, если пишутся ansible playbooks, охватывающие несколько дистрибутивов, то делается условный include на семейство или версию дистрибутивов. Ведь кроме имён пакетов конфиги могут лежать в разных директориях, использоваться разные init-системы и т. п.
Я понимаю, что ты осилил case и прочие основы bash, но выкатывать свой helloworld.sh, пусть и на несколько сотен строчек — моветон. Тем более называя его таблеткой от всех болезней.
Читателей прошу ни в коем случае не использовать это, даже ради «посмотреть как на баше писать» так писать нельзя. Модераторов или автора прошу удалить\убрать в черновики статью как зловред.
ps: У кого один-два сервера должны прочитать ман и поднять нужные службы правильно, а не как в твоём скрипте. У кого серверов много — давно научились puppet\ansible.
Подскажите, пожалуйста, в какую сторону надо копать, чтобы узнать, как надо делать?
Если говорить конкретно о RHEL/CentOS, то можно почитать RHCSA/RHCE Red Hat Linux Certification Study Guide, а так же документацию на сайтах Red Hat, Fedora Project и CentOS.
Ну и за лишний запуск man ни кто по рукам не ударит.
так называемый unix-way, это в первую очередь понимание задачи и способность хотя-бы самому себе сформулировать, что же нужно получить в итоге.
Как уже заметили выше — нужно что-то готовое, гораздо лучше просто купить готовую услугу. VPN, прокси, хранение данных — всё это есть, или за деньги сравнимые с VPS, или даже бесплатно. И если вам лень разбираться, как это реально работает — такого рода скрипты дадут только ложную уверенность.
Ох… Я имел в виду немного другое. Я сам против использования чего-то не разобравшись в вопросе.
Просто iAndrey говорил
PPTP в 2016? «Декорации» в меню? Сотня echo ""
и мне стало интересно — чтобы написать для себя некий скрипт конфигурации с менюшкой, что использовать вместо раскритикованных вещей? Просто если бы я писал что-то такое, то так же бы использовал case и echo в большом количестве.
ansible, salt, chef, puppet (что-то забыл?) — кому что интереснее/удобнее/привычнее. Насколько я понимаю, у ansible самый низкий порог вхождения, и в случае «нет у меня кластера, одна машина» с ним проще всего.
Мне ближе salt, поэтому я бы начинал с https://github.com/saltstack-formulas/
Что там хотел автор, VPN? Например https://github.com/saltstack-formulas/openvpn-formula
Прокси? https://github.com/saltstack-formulas/squid-formula
Почему-то уверен, что есть где-то аналогичный сборник уже готовых «рецептов», для остальных систем автоматической конфигурации.
— Не понимаю, откуда у людей такая тяга к интерактивным штукам. Понятно откуда тяга к общению с людьми: от природы, инстинкты, гены и всё такое. Во всех остальных случаях, всегда нужно стремиться к одной кнопке «сделать хорошо».
Опять-же, в случае salt'а, скажем, я пишу
some.new.host:
— vpn
— squid
— some-another-stuff
в одном месте, а потом в консоли говорю
salt some.new.host state.highstate
Через какое-то время, получаю на этот some.new.host всё установленное и настроенное так, как мне нужно.
«Как именно нужно» — опять-же, хранится в рецептах «vpn», «squid», «some-another-stuff».
Правда, удобно?
Большое спасибо за ответ и ссылки.
ansible, salt, chef, puppet (что-то забыл?)
bcfg, cfengine и тонна более древних средств. Моё личное предпочтение — ansible, т. к. требует только ssh для начала работы и python 2.4+ для продолжения, но не требует агентов на хостах.
С тех пор, с одной стороны, что-то на тему Windows сделали в ansible. С другой, у salt появился salt-ssh, который «как в ansible». За другими совсем не слежу, но слышал Chef вполне себе успешно развивается.
В общем, смысл писать «скрипты» (да еще и на bash) для конфигурирования линукса мне не понятен. Если нужно один раз — просто делаешь руками, если нужно много раз — пишешь рецепт для своей любимой системы оркестрации или как там их правильно называют.
zpanel_install()
{
wget http://evtikhov.ru/zpanel.sh
sh zpanel.sh
rm -f zpanel.sh
}
Домен автора? При желании отличный ботнет выйдет :-)
Ну и согласен с тем, что единственная польза от скрипта — это понять, как не надо писать на bash.
Думаю, что автору (если цель, конечно, не распространение ботнета) имеет смысл немножко углубится в знаниях по администрированию *nix-систем и в последующем написать пост о работе над ошибками после этого. Будет ценнее и полезнее.
ОС — это среда для запуска программ, и для меня (прикладного программиста) разбираться в системе — это лишняя работа.
Если бы при аренде VDS можно было галочками отметить пакеты, которые надо установить,
гордые собой линуксойды остались бы без работы.
Если бы в всех Linux была единая настройка конфигурации, не требующая знания системы, проценты были бы другие (imho).
То, что человек сделал шаг в этом направлении, я приветствую.
А то, что он плохо знает bash, — не страшно и не главное.
Я не администратор Linux и не хочу им быть. Не хочу забивать голову сотнями команд и параметров.
Я хочу при установке системы нажать 28 раз кнопку ОК или клавшу «Y» и получить готовую систему.
П.С. Я недавно сменил хостинг из-за непомерной жадности хостера. То, что настройки apache делаются по другому
и то, что MySql не понял старый my.cnf, меня удивило и опечалило. И отняло время.
1) Мы говорим о десктопах или о серверах? Покажите эти 90% серверов под Windows.
2) Вас насильно заставляют администрировать linux системы, или жалко денег на профильного специалиста, а сервер под Windows любой человек с улицы сможет правильно настроить?
3) Т.е. вы не зная как устроена и работает система разрабатываете под неё программное обеспечение?
PS Ну вот ни как не пойму, зачем 28 раз нажимать «ОК», если можно один раз указать путь к ks файлу и идти пить кофе, а по возвращении получить готовую систему в которой не просто апач будет установлен (коли вы про веб-дев заговорили), но и ваше приложение уже развернётся и запустится.
Вы удивитесь, но мы разрабатываем кроссплатформенное прикладное ПО, и оно всюду работает.
А то я и заказчики думали, что у нас все одинаково хорошо, а оказывается во как.
Поделитесь примером, что нужно знать прикладному программисту на Python про отличия в системах.
Я кроме chmod ничего и не знаю.
Более-менее серьёзные проекты требуют определённых знаний, но нужно знать специфику проекта, чтобы сказать каких. А можно везде городить свои велосипеды, но это снова разговор про «одинаково плохо»
У нас средний проект: 25 тыс строк на Питоне, JS/CSS еще 10т., около 200 html-форм, около 300 пользователей (MFF/GH).
Один и тот же код работает на Windows и разных Linux с разными SQL серверами.
Распределенная система из 30 серверов. В т.ч. есть мнисерверы: стартуют, как службы виндовс на ПК пользователя.
И никто из команды не знает ни Windows ни Linux и знать не хочет.
Когда клиент просит настроить ОС, коллеги валят на меня, а я с матюгами лезу в шпаргалки и мануалы.
При этом главная мысль: «КАК ЭТО ВСЕ НЕУДОБНО».
Исходно шла речь о администрировании ОС и о том, нужен ли инструмент, позволяющий получить готовую систему без глубоких знаний в части администрирования.
Смею Вас уверить, что то, что я узнаю/вспоминаю в процесс настройки ОС, для прикладного программирования БЕСПОЛЕЗНО. Отсюда соответствующее отношение.
Не потому, что я этого не могу, просто мне это неинтересно. Когда я проходил обучение в Nato по курсу «Практическое администрирование TCP/IP сетей» (это не шутка), я во многом разобрался. Получил сертификат и благополучно все (почти все) забыл, потому что для прикладного программирования это не нужно.
Как мы разворачиваем:
Для минисервера на ПК пользователя есть инсталлятор (делается с помощью cx_Freeze + InnoSetup).
Для обычного сервера надо скопировать папку и прописать запуск приложения.
Остальное через ВЕБ. Исходные тексты одни и те же. Кроме chmode ничего платформозависимого.
Мне кажется, все так делают. Недавно жене в институте установил Moodle (онлайн обучение) — та же схема. Копируешь папку, а дальше веб-настройка.
Ну это на мой взгляд. На тот же (мой) взгляд, вы слишком настойчиво пытаетесь навязать весьма далекую от действительности точку зрения о бесполезности понимания процессов ОС для прикладного программирования.
Вообще странно видеть человека, который занимается программированием, но упорно не желает изучать среды, под которые программирует.
О времена, о нравы
Наш проект сочетает multiThreadin и multiprocessing, сервера общаются друг с другом и со смежными системами по 7 протоколам, могут одновременно работать с разными sql-серверами, полнотекстовый поиск через сфинкс.
При этом решается прикладная задача. Пользователям не важно, какая ОС. Нам тоже. Питон всюду одинаково работает.
Зачем тратить время на освоение того, что не нужно? Я вот даже не знаю, что такое реестр в винде. То ли это файл, то ли таблица, формируемая при загрузке. И совершенно не комплексую.
На мой взгляд, копаться в системе нужно системным программистам, тем кто пишет драйвера и системные утилиты.
Сейчас заказчик попросил мобильное приложение — ваяю в Android Studio и даже в мыслях нет изучать еще одну ОС.
Кстати никто не привел ни одного примера, зачем прикладному программисту знать тонкости ОС.
Вот библиотеки питона, по вашему, кто писал? Системный программист? «Программист драйверов»? Как вы отличаете системного программиста от прикладного?
Ваша задача слишком узка для того, чтобы можно начать дискутировать на тему «Зачем программисту знать про специфику ОС».
Вот я знаю как писать драйверы и приложения под win, *nix системы, могу выбрать язык (c/c++, python, bash, vbs, asm), могу выбрать api (winapi, gtk), framework (dotnet, qt), написать оконное приложение, консольное. Сегодня захочу написать свою оболочку (на замену Explorer, если угодно) для win, а завтра веб-приложение. Кто я? Системный программист? Прикладной? Кросс-платформенный я или инструмент (ЯП)? Мыслите шире, изучайте, познавайте. В информационных технологиях никакие знания не бывают лишними.
Задачи разные: для платформозависимых надо знать ОС, для моих — не надо. О чем спорить?
Прикладной программист это, имхо, тот, кто в первую очередь разбирается в прикладной задаче. Ее и надо изучать.
Для меня ОС — это среда для запуска приложений, и если автор скрипта пытается упростить ее настройку, я это приветствую. Тем, кто посвятил себя администрированию, наверно обидно, что имея удобный инструмент любой чел сможет сконфигурить Линукс не хуже чем гуру со стажем. Иначе я не могу объяснить столько негатива в адрес автора скрипта.
Вот товарищ пишет: «администрируя юникс крайне вредно использовать виндовые подходы. Что за желание сделать одно мегаприложение? Учитесь думать по другому».
Думать по другому для него — это помнить десятки команд и настроек, вместо того, чтобы запустить приложение, которое спросит, что я хочу и само все сделает. Причем оптимально и без ошибок.
Простое лучше сложного, давайте упростим настройку. Но нет: деды руками вводили команды, отцы вводили и мы будем. Как в старой шутке: в Линукс настроить можно все, и вы, блин, будете настраивать все.
Не умеешь linux — ставь Ubuntu, там всё просто. Зачем выбирать систему, где предполагается наличие скиллов у администратора, если администратора нет?
Оптимально и без ошибок? Повторю вопрос (если и сейчас уйдёте от ответа, значит вас всё устраивает): к скрипту у вас претензий нет — он хорошо написан, делает правильные вещи правильным образом?
2. Я выбираю систему из того, что стоит у заказчика или из списка систем провайдера
3. Я не писал, что скрипт хорош, я говорил о шаге в правильном направлении
Про chown — грешен, утаил: я его тоже использую.
Вам показалось, что я писал конкретно про Ваш негатив.
Да, мы делаем веб-приложения. За ними будущее. Толстые клиенты вымрут, а платформозависимое ПО останется в инструментальной сфере.
По поводу скрипта: шарить по каталогам и вводить команды руками я считаю тупой работой. Помнить десятки команд и сотни параметров я считаю бесполезными знаниями. Потому что все это может сделать компьютер. Он для того и придуман.
Вы кривую архитектуру пытаетесь выставить как достоинство. Системные требования вашего ПО можно? А результаты тестирования производительности?
Подход эффективен, потому что все работает прекрасно. Кстати вместо 100к у нас будет примерно 5М. И что? Вас это пугает? Система, которая стояла до нас была сделана на нормализованной базе и работала медленнее.
Вы что-нибудь слышали о mangoDB? Если для Вас она тоже кривая, то говорить не о чем. У нас тот же принцип реализован иначе и на базовых запросах работает быстрее (сбор отчетов, правда, медленнее).
Не думаю, что здесь уместно рассказывать о системных требованиях.
Результаты тестирования — вещь многоплановая. Если коротко, годовые отчеты собираются за 2-30 мин. Поиск работает быстро: в ТЗ был прописан Сфинкс (отличная вещь, кстати), но потом попросили убрать кнопку. Потому что родной поиск по скорости работает практически также (меньше секунды, в таблице 20 млн строк).
Вы что-нибудь слышали о mangoDB? Если для Вас она тоже кривая, то говорить не о чем.
Вы про эту, надеюсь? Прекрасная быстрая CLOUD SCALE база без IO bottleneck'а.
/dev/null
'ы наши быстрыЕсли про другую и это не orm к монге для пыха, то стоит написать об этом в MongoDB, Inc. То trademark infingement дело такое..
Какой «тот же»? Вы уже внутри реляционной СУБД сидите, а используете её как документоориентированную. И рассказываете тут о производительности хорошей.
Конечно, если вы расскажете о системных требованиях, вам уже не получится петь о высокой скорости работы.
Да именно так. Сделали ДОБД в РБД и там сидим, и производительность хорошая. Отчеты тормозят. АП РФ требует отчеты 200 столбцов на 2000 строк — они ночью собираются за 30 мин.
Возможно откажемся от MySQL и будем в PostGree хранить данные в json. Переходить на MongoDB не планируем, хотя прикладная задача документоориентированная
Postgree… PostGree
Прекратите коверкать название. Оно либо postgres, либо postgresql.
Это правительство региона.Как раз не показатель. При распиле бюджета зачастую решает не качество, а откатчество. Налогоплательщики любой цирк оплатят, даже «ДОБД в РБД».
У некоторых подразделений свои сервера со своими админами, которые чужих не пускают.Иными словами: «не знаем ни как настроить, ни ТЗ для местечковых админов написать не можем.
производительность хорошая. Отчеты тормозят./0
Когда мы применили документориентированный принцип хранения стало лучше: быстрее и гибче.
Кстати ДОБД в РБД не мы придумали. IBM в свое время интегрировало Lotus Notes и DB2. Записи из документориентированной системы (Lotus Notes) хранились в РБД. Почитайте статьи на эту тему, а то у вас взгляд однобокий.
Когда мы применили документориентированный принцип хранения стало лучше: быстрее и гибче.Я разве сказал, что у вас самый плохой продукт.? И то, что до вас было ещё хуже и тот продукт был принят в работу лишь подтверждает теорию откатчества.
Кстати ДОБД в РБД не мы придумали. IBM в свое время интегрировало Lotus Notes и DB2.Если в вашем мире с 1989 года ничего нового не придумали, это не значит, что весь IT мир застыл в прошлом веке.
Я больше 10 лет работаю с госструктурами и не разу с ними не сталкивался. За последние 2 года больше 30 договоров и все через эл. торги. С реальными конкурсами (бывало и с демпингом, бывало и проигрывали). Кому и за что откатывать? Я не ангел, но участвовать в мутных схемах — себе дороже.
IBM интегрировало Lotus Notes и DB2 в 2008.
В Postgres поддержка Json (т.е. возможность реализовать ДОБД в РБД) появилась в версии 9.2. (кажется 2014).
Что касается уровня ваших знаний, то я про них говорить не хочу.
Насчет откатов вы больший специалист, чем я.Я лишь сказал, что фраза «это проект для муниципалитета» ни разу не говорит о качестве продукта. И это скорее за камень в огород предыдущих разработчиков можно принять (у которых было ещё хуже). Но раз шапку вам тушить пришлось… ок.
В Postgres поддержка Json (т.е. возможность реализовать ДОБД в РБД) появилась в версии 9.2. (кажется 2014).И что? Вы храните в реляционных базах информацию. Вы и преимущества NoSQL не используете, и преимущетв SQL себя лишили. От того и тормозят.
Почему бы вам не переключиться с критики нашей системы на критику MongoDB и ДОБД вообще. Мы всего лишь по требованию заказчика повторили монгоДБ с хранением данных в РБД. Поиск у нас работает быстрее, чем в монго, запись медленнее. Аналитические отчеты в любой ДОБД будут тормозить. Монго компактней, но это не принципиально. Вложения занимают террабайты, а на размер базы никто не смотрит.
Да, изобрели велосипед. Но:
1. нам за это заплатили
2. велосипед получился удобным: не нужен север mongoDB. Мини-сервер стартует как служба виндовс и может хранить данные в SQLite. Рразвернуть такой сервер может девочка, которая (ужас) даже не знает, какая у нее ОС.
Система не идеальна, список TODO не мал, но вы же ее не видели. Почему ДОБД в РБД это цирк, а ДОБД в mongDB это не цирк?
Почему бы вам не переключиться… на критику MongoDBПотому что монго не плоха. Плохо делать монгу в мускуле.
И не придирайтесь к опечаткамЕсли бы это были опечатки. Неоднократное коверкание того-же PostgreSQL. Говорит о том, что это неграмотность, а не неосторожность.
Да, изобрели велосипед. Но нам за это заплатилиПравильно, зачем брать готовые решения, если можно распилить гос. бюджет на разработку своего велосипеда?
не нужен север mongoDB.Но нужен SQL сервер.
Мини-сервер стартует как служба виндовс
и может хранить данные в SQLite.
Рразвернуть такой сервер может девочка, которая не знает, какая у нее ОС.
Чуть выше вы говорили о кроссплатформенности. Неосилили системд, от того и бомбит?
То сотни пользователей, то база sqllite. Вы уж определитесь с масштабами.
Зачем девочке разворачивать службу? Есть технари на это.
Система не идеальна, список TODO не мал, но вы же ее не видели.Сову видел, тыкал палочкой в то, что Результат предлагает. Без слёз взглянуть невозможно. Да и пилится оно уже не один год далеко. Ощущение, что цель не результат, а цель присосаться к бюдежту на самый долгий возможный срок.
Почему ДОБД в РБД это цирк, а ДОБД в mongDB это не цирк?Потму что монго и есть ДОСУБД. А вы имитируете ДОБД в РСБУД не используя ДО функционал сервера. Но если вы этого не понимаете, о чём с вами вообще говорить можно?
Про наши серверы повторюсь: система распределенная. В каких-то подразделениях работают десятки человек — там сервер под Linux или WinServer. Где-то 1 чел. Там мини-сервер с SQLite. Исходники одни и те же. Клиентское ПО: MFF/GH. Если мини-сервер включен, коллеги имеют доступ к системе по чтению. Красивое решение с минимальным привлечением технарей. Или вам за технарей обидно: то, что должен делать админ, знающий 100 команд, у нас делает девочка, умеющая лайкать няшки?
Причем тут Сова? У вас в голове все смешалось. Сова — это примитивная локальная CRM, написана давно для конкретного человека и выложена в сеть бесплатно.
У вес не «система распределённая». У вас бардак. Это видно и по комментариям, и по тому, что вы гордитесь тем, что из-за вашей криворукости девочка вынуждена отвлекаться от своей работы на установку вашей системы.
А что одно, что другое — всё дичайшее легаси с болезнями начала нулевых.
Вам девочка не дает покоя, потому что для разворачивания системы ваши глубокие знания ОС бесполезны? А вас не напрягает то, что на телефонах девочки сами устанавливают приложения? Я светлое будущее вижу так: отметил галочками перед установкой ОС нужное, нажал кнопку и ОС готова. И никаких сисадминов. Простое лучше сложного.
В чем на ваш взгляд бардак?
Он, конечно есть, точнее они. Локальные бардачки, помеченные TODO. Мне интересно ваше мнение.
Комментарии действительно…
По поводу распределенности:
есть несколько автономных систем, которые обмениваются информацией. Каждая система обрабатывает свою информацию и информацию от других систем. И возвращает результаты. Это можно назвать распределенной системой?
Мы положили в основу EAV, отсюда упор на ДОБД. Json-поля для этого хорошо подходят. В ссылке, которую вы мне дали, автор пишет о них, как об альтернативе mongoDB (про недостатки я тоже прочитал). Все зависит от задачи. Почему использовать в качестве хранилища mongDB — это хорошо, а postgres — это плохо?
Вопрос терминологии. Я это называю распределенной системой.
Взаимодействие с внешними системами: 2http, smtp, imap4, smpp(не используется).
Зачем для EAV 2 таблицы? У нас 1.
Монго, основные понятия:
база: список документов с уникальными id
коллекция: список документов внутри БД (список id)
документ: словарь (объект) «ключ-значение»
связанность/подчиненность документов: поля со списком id
На мой скромный взгляд EAV и никакой магии
По второму подписываюсь под словами KlimovDm
Все в порядке.
поделился с миром и оказывается в реальном мире код надо выкладывать на гитхаб, код написан не правильно, а правильно надо через dialog, в 2016 году уже есть всякие механизмы автоматизации ansible, да и вообще скрипт от рута работает
вот так вот послушаеш всех и поймеш, что оказывается твои знания давно устарели и ты не модный админ, застрял где-то в прошлом
и тут самооценка падает и больше не хочется быть админом (типа смайлик тут)
Задаём переменную с нужным количеством пробелов, чтобы меню не разъезжалось от смены версии
Есть же printf "%-7s${$title}"
Определяем ОС
if [ "$(cat /etc/redhat-release | awk {'print $2'})" == "release" ]
и т.д. и.т.п.
А если файл не найден?
уберём двойные пробелы:
cpu_model=echo $cpu_model | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g" | sed -e "s/ / /g"
Мои глаза! sed -e "s/ */ /g"
iptables -A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
echo "0 4 $temp * * $cron_task" >> /var/spool/cron/$(whoami)
Нет чмода (0600) и човна ($user:crontab) соответствующего файла. Выполнять все задания от рута — рискованно.
В целом: шибко большая простыня исходника скрипта, так и напрашивается разбитие на подскрипты, запуск с параметрами (getopts) и вынос настроек [с урлами] в отдельный файл, подгружаемый через source <(grep = "${D}/config.ini" | sed 's/ *= */=/g')
Нет проверки на уставленный запускаемый бинарник, только проверка на установленный пакет.
Не нашел самого важного: бекапы.
set -x
И наблюдаете всё, что он делает. Однако, соглашусь с отдельными комментариями, рекомендующими ознакомиться хотя бы с основами системы, в которой работаешь, прежде чем запускать скрипты из интернета.Кстати, вопрос к администраторам Linux (сам я нуб).
Код на bash лично мне делает больно глазам — переменные, условия, циклы (ну это понятно, он выполняется командным интерпретатором).
Почему бы не использовать скрипты на том же Python, который куда понятнее и удобнее для чтения и позволяет с легкостью вызывать команды. Во многих десктоп-дистрибутивах он уже есть "из коробки", а если есть — легко поставить?
Преимущество bash/dash/ash в повсеместности, на любом тапке под UNIX будет подобный шелл. Стандарт POSIX требует наличия этого, насколько помню. Помимо этого, во множестве дистрибутивов он является login shell, а посему более-менее известен пользователям. Ну и на мой взгляд, простые скрипты делать на bash просто: используются ровно те же команды, что вы можете писать руками (то есть, взял из истории пачку строк, сохранил в файл — есть скрипт); различные expansions, куча руководств по созданию скриптов именно в обычном шелле. С другой стороны, когда такой скрипт разрастается — его уже сложнее править и читать, да и разных (для многих неожиданных) особенностей хватает.
Я бы сказал, что если ваш скрипт будет запускаться только в современных системах на десктопе и вы знаете Python/Perl/Ruby — стоит на них и писать.
Очень полезная вещь, благодарю от души. Такие скрипты очень облегчают и больше времени остаётся на другие дела.
Единственная просьба есть у меня добавить в панели управления серверами webmin ;) хотя я ещё не юзал скрипт (сегодня проверю обязательно ) но на сколько понял по описанию webmin нет(((
До сих пор использую centminmod для автоматизирования многих задач в Centos.
KISS-принцип
Если вы посмотрите как часто на лорге спрашивают как поднять vpnВот скажите, на моём арче ваш скрипт поднимет корректно vpn?
Но вы всё это знаете лучше меня. Так и к чему был этот вопрос? Потролить человека, который разбирается в Линукс меньше вас? Или была ещё какая-то цель?
Ну а цель вопроса тут… не знаю, обыграть этот парадокс через иронию.
На форумах часто спрашивают про pptp? Повторюсь, в 2016?
Вы дали общий сборник чего, «worst practices»? Тогда годно, но статью переписать нужно.
Если для вас дать возможность любому нубу, без объяснений, мануалов и тестов, развернуть свой VPN-сервер где-нибудь в Болгарии или Нидерландах за минуту, просто нажав несколько раз «далее» — это зло, то ради бога. Считайте так. Это всего-лишь ваша точка зрения. На свете есть и другие.
Только без этого он всё равно так сделает, но значительно дольше. Он залезет на ЛОР, часа два там поищет какие-то практики, попытается развернуть OpenVPN под какой-нибудь Fedora, не сможет подключиться к нему сначала потому, что не поймёт, что для openVPN нужно ставить сторонний софт под виндой. Потом, возможно, переделав всё на PPTP он ещё раз не сможет подключиться к VPN просто потому, что в этих советах не было ни слова про настройку iptables. Далее он психанет, пойдёт ещё куда-нибудь и, в итоге, найдет как отключается «страшный фаервол», отключит его и будет пользоваться тем, что получилось. Просто потому что работает и по-другому он «не осилил».
Я ему просто сэкономлю время. И хотя бы закрою все лишние порты в iptables.
Если для вас дать возможность любому нубу развернуть свой VPN-сервер просто нажав несколько раз «далее» — это зло, то ради бога.Вам что-то мешает скриптом нагенерить сертификатов, создать конфиг и запустить сервер? А что вам тогда мешает тем же скриптом сгенерировать ключи и клиентский конфиг? «Установить» ваш скрипт ему не сложно, а протыкать «далее-далее-готово» в openvpn-setup.exe ему тяжкий труд? Вы нафигачили бесмысленных «начинаю установку», «заканчиваю установку», а написать пользователю «Для форточек зайди по адресу и скачай установщик клиента, ибо пптп не безопасно» религия не позволяет? А ещё можно bat или ps накидать, который сам и установщик скачает, и развернёт, и конфиг закинет, и службу запустит. Но зачем делать безопасный VPN, когда есть PPTP, верно?
Он попытается развернуть OpenVPN, не сможет подключиться к нему сначала потому, что не поймёт, что для openVPN нужно ставить сторонний софт под виндой.
Вы не экономите время, вы наносите вред создая иллюзию упрощения, де факто настраивая так, как настраивать нельзя.
1. Вы считаете, что если вы не используете PPTP, то его в этом мире не использует никто? У вас есть статистика сколько сессий в мире поднимается на PPTP, сколько на L2TP, а сколько на OpenVPN?
2. А то, что большая часть крупных провайдеров (в т.ч. «Билайн») всех домашних пользователей проводного интернета обязывает использовать именно PPTP для выхода в интернет, вас не смущает? :)
3. Как вы думаете, если пользователю, который ничего не понимает в VPN, в шифровании, в безопасности и в настройке линукс, предоставить выбор: поднять PPTP и подключиться из любой винды в пару кликов, не ставя ничего или же поднять OpenVPN, ставить сторонний софт, сертификаты и так далее, и даже крупными буквами написать, что защищенность OpenVPN многократно выше, то все ли добровольно выберут OpenVPN?
2. Билайну плевать на вашу приватность. Им pptp нужен не как средство повышения безопасности клиентов, а как способ их аутентификации. Так что тоже мимо.
3. Предоставить удобный инструмент для поднятия сервера и настройки клиента OpenVPN. Но ни в коем случае не автоматизировать установку дырявого сервера.
А то, что большая часть крупных провайдеров (в т.ч. «Билайн») всех домашних пользователей проводного интернета обязывает использовать именно PPTP для выхода в интернет, вас не смущает? :)
С разморозкой. Они долго использовали l2tp без ipsec (ещё во времена Корбины), а теперь привязывают mac-адреса к портам своих свитчей и не используют l2tp вообще. Но, как написал iAndrey выше, это было не про безопасность, а про accounting.
Гляньте, гляньте! Там приведен скрипт поднятия VPN сервера под Debian. Делает примерно то же самое. Только обратите внимание как он написано. IP он берет только для интерфейса venet0:0 (который там «захардкожен»). Причем, предполагаю, что не во всех версиях дистрибутива он одинаково хорошо определит IP, потому что вывод команды ifconfig может отличаться.
Но интересно даже не это. Интересно, что я потом лично на ЛОРе видел обсуждение, где нубы спрашивали почему же этот скрипт не работает. Не работал он, естественно, потому что интерфейс у него был eth0. Человек потратил несколько дней, чтобы добиться ответа на этот вопрос. И стал ли он лучше знать Линукс? Нет. Я ему хотя бы сэкономил время. Он сработает на любой версии rhel-дистрибутива и на любом интерфейсе.
Зло это или нет — вопрос всё же филосовский. Вам не нравится — вы не пользуйтесь. Но, поверьте, есть люди, которым он пригодился. И это никак не зависит от вашего отношения к ним и к их профессионализму.
P.S. Ещё раз: не принимайте на свой личный счёт. Просто точек зрения чуть больше, чем одна ваша.
Хочешь, я за $100 научу как сделать openvpn и файервол вне зависимости от названия интерфейса? За $200 дам готовый пример на баше, если учиться не хочешь.
Если денег нет, бесплатно три подсказки:
1) не нужны старые net utils, iptables и иже с ними. хватит firewalld, nmcli
2) Интерфейсов может быть несколько, и все могут быть «активными внешними».
3) Оперируй не портами и интерфейсами, а сервисами и зонами. man firewalld
И самое главное, ради чего повышенное шифрование этой сессии, если он собрался не банк взламывать, а рутрэкер открыть?
С чего это мою утилитку? Это вы тут автоматизировать дураков пытаетесь. А вот, почему вы не снабжаете пользователей необходимой информацией — уже сами себе можете ответить.
Рутрэкер спокойно в торе работает. Зачем для него VPS\VDS держать? Да и готовых VPN сервисов навалом для этих целей. А вообще, пиратить не нужно.
И да, у вас в статье написано много юзкейсов, где кража данных может принести ущерб. Где в скрипте предупреждение, мол «если что ценное есть — впн скриптом не поднимай. дырявое будет»?
А если бы и взломали, то мне не был нанесен какой-либо ущерб от слова «совсем». Я не передаю конфиденциальную информацию по нему. Конфиденциальные данные я передам по тому же OpenVPN, например.
Что вас останавливает? Народ ведь требует именно таких статей!
Писать вам разбор полётов? Работу над ошибками? Вы сначала репетиторство оплатите. Направление куда копать, чтобы научиться, я вам и так уже подсказал.
А теперь давайте вернемся к VPN. Есть два варианта: использовать PPTP, который нативно поддерживается любой мобильной и настольной ОС и не требует установки никакого стороннего софта. Просто вводите адрес, логин, пароль и вуа-ля, мы в другой сети. И есть другой вариант — OpenVPN, который на ЛЮБОЙ ОС требует установку отдельного ПО. А кроме этого — ещё хранения где-то своих ключей шифрования. Кроме не самой простой настройки сервера, приходится довольно долго настраивать КАЖДОЕ клиентское устройство, с которого мы хотим подключиться. Туда нужно поставить софт, настроить, а потом ещё как-то доставить туда ключи шифрования. И вот тут, кстати, наша безопасность уже может кануть в лету. Дело в том, что если человеку на каждой клиентской машине может понадобиться закрытый ключ, то этот ключ он начинает хранить… где? В каком-нибудь легко доступном месте. Например, в Dropbox. Ну и о какой безопасности тогда идёт речь, если свои ключи становится скомпромитировать ещё проще при неправильном подходе? А как вы хотите заставить пользователя пересмотреть свои взгляды на хранение ключей? Это даже банкам особо не удалось.
И вот два этих варианта (PPTP/OpenVPN) дают клиенту абсолютно одну и ту же «услугу» — они пускают его в другую сеть. Разница только в стойкости шифрования. Да, OpenVPN намного безопаснее, с этим никто не спорит (вопрос про компрометирование ключей пока оставим). Но вот вопрос… Зачем ему эта повышенная безопасность? Тут нужно обратить внимание на потребности конечного пользователя. Если он собирается по этому VPN-каналу кидать перс.данные своих клиентов — тогда вопросов нет, тут важна безопасность, потому что за сохранность этих данных есть ответственность, предусмотренная ст. ФЗ 152. Или если по этому каналу он собирается гонять платежные транзакции — тоже спору нет. Вот только это не является целевой аудиторией в данном случае. А если цели пользователя попроще? Например, поиграть в онлайн-покер, который запрещен РосКомНадзором. Или подменить свой географический регион, например, чтобы в Steam купить игру по акции, проводимой для другой страны. Или, например, посмотреть онлайн-видео сервисы, которые работают только для пользователей США. Во всех этих случаях по VPN не передается конфиденциальной информации. Задачи пользователя очень просты — обойти географические запреты. Пользователю наплевать, расшифруют ли его трафик пока он смотрит Netflix или нет. Ему вообще это без разницы. А вот возможность посмотреть американский сериал в онлайн-сервисе (никакого пиратства, sic!) с любого устройства с наименьшими трудозатратами (без установки софта) — это ему намного важнее. Неужели это непонятно?
И я ещё раз задам вопрос. Вот представьте: я допишу в скрипт автоматическое поднятие OpenVPN сервера и предоставлю пользователю выбор на каком протоколе создать VPN. При этом я очень крупно и жирно напишу, что шифрование PPTP самое слабое из всех возможных протоколов VPN, что я не рекомендую его использовать, если по каналу передается конфиденциальная информация, что лучше использовать OpenVPN, но сделаю оговорку, что он требует установки стороннего ПО и ключей на клиентской стороне. И вот как вы думаете, имея такой выбор, что выберет конечный пользователь? Простоту или безопасность в ситуации, когда она неважна? Вы уверен, что в 100% случаев будет выбран OpenVPN? А вот я уверен, что даже не в половине случаев. Просто мы с вами по разному оцениваем целевую аудиторию, которая может использовать этот скрипт и собственно задачи, для которых он будет использоваться.
Во-вторых, вы сейчас размываете предмет разговора. О чем спор в этом треде? Вы говорите, что новичку можно обойтись без этого. Конечно можно! А ещё можно обойтись без клавиатуры и монитора. Есть ведь перфокарты! Простите, утрирую. Да, новичку можно обойтись и без задавания вопросов на ЛОРе. Вот тебе учебник, вот тебе man — разбирайся. Когда-нибудь настроишь. И не факт, что лучше и безопаснее. Но да, можно и так. А можно выдернуть готовый скрипт и не обязательно мой. Их много. Выше я давал ссылку на другую статью на Хабре, где поднимается VPN, тоже PPTP, но ещё менее универсально, я хотя бы IP определяю по реальному запросу во внешку и даже если там 10 интерфейсов, в интернет-то он ходит по какому-то одному, вероятнее всего. Но мне казалось, что предмет разговора у нас другой. Меня обвинили в том, что если человек мне доверился и решил, не разбираясь, настроить VPN сервер с помощью моего скрипта, то я компрометирую это доверие тем, что устанавливаю ему менее защищенный VPN-сервер, чем мог бы. А я объясняю, что делаю это сознательно для максимально упрощения его использования. Потому что в моей парадигме, пользоваться этим будут только для баловства, тестов, экспериментов и, действительно, каких-то прикладных задач, но где не важна конфиденциальность (покер, игры, медиа-контент, ограниченный по географическому признаку). И вот в чём прав iAndrey, так это в том, что, пожалуй, мне стоит выводить на экран предупреждение о степени защищенности такого канала (как, например, я предупреждаю, что использование анонимного прокси незаконно и может вызвать блокировку VPS). За этот совет ему спасибо — обязательно учту.
Ну и простите меня за то, что я покусился на святую unix-way философию. Я признаю, что как раз цель была не заставлять пользователя использовать десяток разных скриптов для разных ситуаций (или шпаргалок на гуглодоксе как что сделать), а скачать всего один скрипт для разных ситуаций. Действительно, это скорее windows-философия, отсюда и столько негатива. Мне показалось, что целевой аудитории (которые как раз исповедуют MS-веру, а не Unix) так будет проще, понятнее и привычнее (и некоторые комментарии и сообщения в личку это подтверждают). И это позволит им меньше бояться линукса, использовать его хоть для чего-то уже прямо сейчас и постепенно начать разбираться в нём самому.
То, что этот подход категорически не понравится любому тру *nix-адепту — я понимал и шел на это сознательно. И то, что каждый мой пост в комментариях вы стабильно минусуете, независимо от его содержания просто по «религиозному признаку» (что никак вас не красит) — я тоже прекрасно понимаю и продолжаю отстаивать свою точку зрения. Благо рейтинг позволяет.
Но в целом я рад, что публикация получилась довольно хайповой, собрала ~56k просмотров, ~600 «закладок» и тонны говна в комментариях. И люди активно тратили свои очки, чтобы выставить ей либо плюсик, либо минусик. Перевес в сторону плюсиков всё-таки говорит о том, что её не нужно выкинуть. Стоит отсеить эмоции в комментариях, принять к сведению здоровую критику, кое что поменять и выложить на гитхаб.
На этом, собственно, всем большое спасибо за конструктивную критику.
TLDR
Ни я, ни KlimovDm, как оказалось, вас не минусовали. Может это люди со стороны?
Кому-то компьютер работать, кому-то фапать на пустой список установленных программ.
Почему вы приводите только плохие сценарии использования? Обойти блокировку, обмануть авторов сервиса, накачать игорей с рутрэкера…Помогать ему в этом не надо. А с обходом рикошетом РКН задетых сайтов справляется тор, который на локалхосте работает и серверов не требует.
Есть два варианта: сделать нормально, но установив приложение, которое (открою секрет, наверное) службой висит и молча поднимает соединение, или через задницу, но используя то, что тебе установили Microsoft. А чем установленное пользователем приложение отличается от того же скайпа, который в W10 планируют из коробки поставлять? Кроме возможности без проблем его удалить.
Если человек ключи в дропбокс кинет, то и пароли там же в txt оставит.
По поводу перевеса в плюс песня и правило 95 + толпа тех, кто плюсик поставил просто за старания, не вникая в суть.
Не сделали OpenVPN потому что не смогли. Не надо отмазок про сознательность.
В конечном итоге понял, что мне не о чем разговаривать с человеком, который переходит на личности и использует в диалоге подобные аргументы:
Не сделали OpenVPN потому что не смогли. Не надо отмазок про сознательность.
facepalm.
Заморачиваться на автоматическое поднятие OpenVPN я не стал просто потому, что это никому из целевой аудитории не нужно. Кому нужен OpenVPN — к тем в принципе не сможет никак попасть в руки подобный скрипт. Вот и всё.
Если смогли, то что же в скрипте её нет?
Всяких веб морд для хостинга куча на выбор, а впн только одна. Почему не выбрана самая простая? "Симплификация" же.
btw, если устанавливать дополнительное ПО — фу, то что в скрипте "Установить какую-либо программу" делает?
Не стыдно сказать "не научился ещё, потому и нет". Стыдно отговорки из пальца высасывать.
Ну а на работе вам администратор как настроил, так и пользуетесь.
Ещё раз повторю мысль: VPN в рассматриваемом мной сценарии используется не для шифрования трафика. А для выхода в интернет из другой точки мира в обход, например, блокировок РосКомНадзора. Меня вполне устраивает то, что мой трафик сейчас не шифруется при работе с провайдером. Меня не устраивает, что у меня теперь множество гугловских сервисов не работает. И я хочу исправить косяк РКН и получить доступ к легитимным ресурсам гугла. Кто-то для этого использует Прокси (который тоже НИКАК не шифруется), но это менее удобно чем VPN. Я для этого предпочитаю использовать VPN. Если бы на VPN можно было отключить шифрование — я бы его отключил для экономии ресурса роутера. Поэтому то, что это шифрование там есть. но его можно взломать — мне совершенно индифферентно.
Автору желаю принять критику конструктивно и перейти на сторону LInux-way.
Для любителей «все в одном скрипте» и «я не хочу разбираться, хочу чтоб работало» есть уже готовые изделия, написаные специалистами, например Yast в OpenSUSE (если оно ещё живо).
https://yadi.sk/d/ckhrwTfduxc7x
ЗЫ: Извиняюсь перед всеми хабровчанами. Я еще не разобрался(о картинке) в структуре комментариев и предпросмотр не помогает, засим, одна из ссылок лишняя, а исправить мне без инвайта невозможно.
Плюс есть вещи вроде webmin, и вы могли бы написать модуль для него (или в некоторых местах использовать его)?
вы, простите, какую операционную систему используете на своем сервере? :)
А про минимальный вызов внешних программ, это я имел в виду скорее предостережение для тех кто хочет из perl'а grep вызывать (видел и такое).
На stackoverflow один товарищ предлагал писать через os и subprocess именно через grep монитор температуры проца примерно так:
a = subprocess.Popen("cat /sys/class/hwmon/hwmon1/temp4_input", stderr=None, stdout=PIPE, shell=PIPE)
a = int(a.stdout.read())
a = a/1000; a = str(a)
Или так:
a = subprocess.Popen("sensors |grep temp|sed q", stderr=None, stdout=PIPE, shell=PIPE)
a = int(a.stdout.read())
a = a/1000; a = str(a)
Или:
b = os.system("sensors |grep temp|sed q")
Уже и не помню:)
Так ведь работает же:)
https://github.com/Brizovsky/Breeze-Easy-Shell/
Скрипт для тех, кому лень разбираться в Linux