{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Очередной IT блог: заметки с тегом CentOS8",
    "_rss_description": "Очередной IT блог",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/crabs.pro\/tags\/centos8\/",
    "feed_url": "https:\/\/crabs.pro\/tags\/centos8\/json\/",
    "icon": "https:\/\/crabs.pro\/pictures\/userpic\/userpic@2x.jpg?1700078106",
    "authors": [
        {
            "name": "lifespirit",
            "url": "https:\/\/crabs.pro\/",
            "avatar": "https:\/\/crabs.pro\/pictures\/userpic\/userpic@2x.jpg?1700078106"
        }
    ],
    "items": [
        {
            "id": "2",
            "url": "https:\/\/crabs.pro\/all\/awx-na-centos8-rhel8-bez-ispolzovaniya-docker\/",
            "title": "AWX на CentOS8 \/ RHEL8 без использования Docker",
            "content_html": "<p>Давно хотел мигрировать AWX в нормальную виртуалку с зоопарка контейнеров. Вот рецепт миграции:<\/p>\n<p>Сначала подключаем репозитории.<\/p>\n<p>Для RHEL понадобится ansible-2-for-rhel-8-x86_64-rpms.<br \/>\nДля всех понадобятся nodejs14 repo и epel.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">cat &lt;&lt; EOF &gt; \/etc\/yum.repos.d\/nodejs.repo\r\n[nodesource]\r\nname=Node.js Packages for Enterprise Linux 8 - $basearch\r\nbaseurl=https:\/\/rpm.nodesource.com\/pub_14.x\/el\/8\/$basearch\r\nfailovermethod=priority\r\nenabled=1\r\ngpgcheck=0\r\ngpgkey=file:\/\/\/etc\/pki\/rpm-gpg\/NODESOURCE-GPG-SIGNING-KEY-EL\r\nEOF\r\n\r\ndnf install https:\/\/dl.fedoraproject.org\/pub\/epel\/epel-release-latest-8.noarch.rpm<\/code><\/pre><p>Затем включаем postgres 12 и выключаем nodejs по умолчанию<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">dnf -y module enable &#039;postgresql:12&#039;\r\ndnf -y module disable &#039;nodejs:10&#039;<\/code><\/pre><p>Далее устанавливаем руками то, чего нет в epel<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">cd ~\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-openssl-devel-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-openssl-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-nss-devel-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-nss-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-devel-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-gnutls-devel-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-gnutls-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-gcrypt-devel-1.2.25-4.el8.x86_64.rpm\r\nwget http:\/\/repo.okay.com.mx\/centos\/8\/x86_64\/release\/xmlsec1-gcrypt-1.2.25-4.el8.x86_64.rpm\r\ndnf install ~\/*.rpm<\/code><\/pre><p>Устанавливаем необходимые пакеты<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">dnf -y install ansible gcc gcc-c++ cpp git git-core git-lfs glibc-langpack-en libcurl-devel libffi-devel libtool-ltdl-devel make nodejs nss openldap-devel patch @postgresql:12 postgresql-devel python3 virtualenv python3-devel python3-pip python3-libselinux python3-psycopg2 python3-setuptools swig unzip xmlsec1 xmlsec1-devel xmlsec1-openssl xmlsec1-openssl-devel openssl-devel redis acl bubblewrap krb5-workstation libcgroup-tools nginx rsync subversion vim-minimal which supervisor<\/code><\/pre><p>Готовим awx<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">cd \/var\/lib\/\r\nwget https:\/\/github.com\/ansible\/awx\/archive\/17.1.0.zip\r\nunzip 17.1.0.zip\r\ncd .\/awx-17.1.0<\/code><\/pre><p>Если нужна интеграция с bitbucket hooks вставляем руками обратно коммит <a href=\"https:\/\/github.com\/ansible\/awx\/commit\/885841caeaea0f7c86d39d6e7a66b960124289c2#diff-c80eb18efdbf596480ee605607043d318310e113ec4d6215ab78c3f46ea1eaf4\">https:\/\/github.com\/ansible\/awx\/commit\/885841caeaea0f7c86d39d6e7a66b960124289c2#diff-c80eb18efdbf596480ee605607043d318310e113ec4d6215ab78c3f46ea1eaf4<\/a><\/p>\n<p>Готовим файлы<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">for dir in \\\r\n      \/var\/log\/tower \\\r\n      \/var\/run\/supervisor \\\r\n    do mkdir -m 0775 -p $dir ; chmod g+rw $dir ; chgrp root $dir ; done\r\n\r\nrm \/usr\/bin\/launch_awx.sh \/usr\/bin\/launch_awx_task.sh \/etc\/tower\/settings.py \/etc\/supervisord.conf \/etc\/supervisord_task.conf \/usr\/bin\/config-watcher\r\nln -s \/var\/lib\/awx-17.1.0\/installer\/roles\/image_build\/files\/launch_awx.sh \/usr\/bin\/launch_awx.sh\r\nln -s \/var\/lib\/awx-17.1.0\/installer\/roles\/image_build\/files\/launch_awx_task.sh \/usr\/bin\/launch_awx_task.sh\r\nln -s \/var\/lib\/awx-17.1.0\/installer\/roles\/image_build\/files\/settings.py \/etc\/tower\/settings.py\r\nln -s \/var\/lib\/awx-17.1.0\/installer\/roles\/image_build\/files\/supervisor.conf \/etc\/supervisord.conf\r\nln -s \/var\/lib\/awx-17.1.0\/installer\/roles\/image_build\/files\/supervisor_task.conf \/etc\/supervisord_task.conf\r\nln -s \/var\/lib\/awx-17.1.0\/tools\/scripts\/config-watcher \/usr\/bin\/config-watcher<\/code><\/pre><p>Начинаем сборку<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">make clean\r\nmake clean-tmp\r\nmake clean-venv\r\nmake requirements\r\nmake release_build\r\nmake install_collection\r\nmake ui-release<\/code><\/pre><p>Устанавливаем то что неразрешилось при сборке<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">. \/var\/lib\/awx\/venv\/awx\/bin\/activate\r\npip install django-rest-swagger django-debug-toolbar\r\npip install .\r\n\r\n. \/var\/lib\/awx\/venv\/ansible\/bin\/activate\r\npip install django-rest-swagger django-debug-toolbar\r\ncat requirements\/requirements.txt requirements\/requirements_local.txt | \/var\/lib\/awx\/venv\/ansible\/bin\/pip install -r \/dev\/stdin\r\ncat requirements\/requirements.txt requirements\/requirements_git.txt | \/var\/lib\/awx\/venv\/ansible\/bin\/pip install --no-binary cffi,pycparser,psycopg2,twilio,pycurl -r \/dev\/stdin\r\npip install .<\/code><\/pre><p>Копируем UI в директорию AWX, создаём дополнительные папки<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">cp -r awx\/ui_next\/build\/static ..\/awx\/\r\ncp awx\/static\/* ..\/awx\/static\/\r\nmkdir ..\/awx\/projects\r\nmkdir ..\/awx\/rsyslog<\/code><\/pre><p>Далее подгоняем конфиги под себя<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">vi \/etc\/tower\/settings.py # правим доступ к базе и секретный ключ (SECRET_KEY и DATABASES)\r\nvi .\/installer\/roles\/local_docker\/templates\/nginx.conf.j2 #из этого собираем конфиг для nginx.conf и переносим в \/etc\/nginx\/nginx.conf\r\nvi \/etc\/redis.conf #выставляем порт 0, указываем сокет unixsocket \/var\/run\/redis\/redis.sock с правами unixsocketperm 777\r\nvi \/etc\/supervisord.conf #сращиваем с \/etc\/supervisor_task.conf, добавляем venv. например: \/bin\/bash -c &#039;source &quot;$0&quot; &amp;&amp; exec &quot;$@&quot;&#039; \/var\/lib\/awx\/venv\/awx\/bin\/activate daphne -b 127.0.0.1 -p 8051 --websocket_timeout -1 awx.asgi:channel_layer и далее по аналогии. Удаляем nginx и rsyslog из supervisord.config, потому что они и так прекрасно работают на systemd. Правим файлы логов что бы писать в файл а не в stdout. Правим шапку супервизора на дефолтную.\r\npostgresql-setup --initdb\r\nvi \/var\/lib\/pgsql\/data\/pg_hba.conf #заменяем тип авторизации для 127.0.0.1 на md5<\/code><\/pre><p>В supervisord.conf получается что то вроде<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[supervisord]\r\nlogfile=\/var\/log\/supervisor\/supervisord-tower.log  ; (main log file;default $CWD\/supervisord.log)\r\nlogfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)\r\nlogfile_backups=10          ; (num of main logfile rotation backups;default 10)\r\nloglevel=info               ; (log level;default info; others: debug,warn,trace)\r\npidfile=\/run\/supervisord-tower.pid ; (supervisord pidfile;default supervisord.pid)\r\nnodaemon=false              ; (start in foreground if true;default false)\r\nminfds=1024                 ; (min. avail startup file descriptors;default 1024)\r\nminprocs=200                ; (min. avail process descriptors;default 200)\r\n;umask=022                  ; (process file creation umask;default 022)\r\n;user=chrism                 ; (default is current user, required if root)\r\n;identifier=supervisor       ; (supervisord identifier, default is &#039;supervisor&#039;)\r\n;directory=\/tmp              ; (default is not to cd during start)\r\n;nocleanup=true              ; (don&#039;t clean up tempfiles at start;default false)\r\n;childlogdir=\/tmp            ; (&#039;AUTO&#039; child log dir, default $TEMP)\r\n;environment=KEY=value       ; (key value pairs to add to environment)\r\n;strip_ansi=false\r\n\r\n[program:uwsgi]\r\ncommand = \/bin\/bash -c &#039;source &quot;$0&quot; &amp;&amp; exec &quot;$@&quot;&#039; \/var\/lib\/awx\/venv\/awx\/bin\/activate uwsgi --socket 127.0.0.1:8050 --module=awx.wsgi:application --vacuum --processes=5 --harakiri=120 --no-orphans --master --max-requests=1000 --master-fifo=\/var\/lib\/awx\/awxfifo --lazy-apps -b 32768\r\ndirectory = \/var\/lib\/awx\r\nautostart = true\r\nautorestart = true\r\nstopwaitsecs = 15\r\nstopsignal = INT\r\nstdout_logfile=\/var\/log\/supervisor\/uwsgi.log\r\nstdout_logfile_maxbytes=102400\r\nstderr_logfile=\/var\/log\/supervisor\/uwsgi-error.log\r\nstderr_logfile_maxbytes=102400<\/code><\/pre><p>Всё что скопировано с supervisord_task.conf (dispatcher и callback-receiver) должно работать с \/var\/lib\/awx\/venv\/ansible\/bin\/activate, всё остальное с \/var\/lib\/awx\/venv\/awx\/bin\/activate<\/p>\n<p>Далее стартуем все сервисы<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl start postgres\r\nsystemctl enable postgres\r\nsystemctl start redis\r\nsystemctl enable redis\r\nsystemctl start nginx\r\nsystemctl enable nginx<\/code><\/pre><p>Создаём БД<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo -u postgres psql\r\n\r\n#Заполняем базу и пароли так же как указали в \/etc\/tower\/settings.py\r\nCREATE DATABASE awx;\r\nCREATE USER awx WITH PASSWORD &#039;awxpass&#039;;\r\nGRANT ALL PRIVILEGES ON DATABASE &quot;awx&quot; to awx;<\/code><\/pre><p>Если восстанавливаемся из бэкапа<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">sudo -u postgres pg_restore -d awx \/awx.bak\r\nmake migrate<\/code><\/pre><p>Если это чистая раскатка<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">make genschema\r\n. \/var\/lib\/awx\/venv\/ansible\/bin\/activate &amp;&amp; awx-manage provision_instance --hostname=$(hostname) &amp;&amp; awx-manage register_queue --queuename=tower --instance_percent=100\r\necho &quot;from django.contrib.auth.models import User; User.objects.create_superuser(&#039;$AWX_ADMIN_USER&#039;, &#039;root@localhost&#039;, &#039;$AWX_ADMIN_PASSWORD&#039;)&quot; | awx-manage shell # $AWX_ADMIN_USER и $AWX_ADMIN_PASSWORD а так же другие данные нужно поменять на свои<\/code><\/pre><p>Если используется LDAP сейчас самое время установить CA и прочие сертификаты для LDAP. Как это сделать лучше нагуглить отдельно.<\/p>\n<p>И наконец запускаем AWX<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl start supoervisord\r\nsystemctl enable supervisord<\/code><\/pre><p>Если что то пошло не так смотрите процессы через supervisorctl и файлы логов, настроенные в \/etc\/supervisord.conf<\/p>\n<p>Надеюсь эта заметка будет полезной.<\/p>\n",
            "date_published": "2023-03-24T23:39:40+03:00",
            "date_modified": "2023-03-24T23:39:33+03:00",
            "tags": [
                "ansible",
                "awx",
                "CentOS8",
                "RHEL8",
                "Rocky8"
            ],
            "_date_published_rfc2822": "Fri, 24 Mar 2023 23:39:40 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "2",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4116,
    "_e2_ua_string": "Aegea 11.2 (v4116)"
}