4 заметки с тегом

archlinux

Правильный LAMP на archlinux

Актуально на апрель 2016. Версия apache, php, mysql:

$ httpd -v
Server version: Apache/2.4.20 (Unix)
Server built:   Apr 11 2016 10:04:04

$ php -v
PHP 7.0.5 (cli) (built: Apr  2 2016 23:10:23) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

$ mysql -V
mysql  Ver 15.1 Distrib 10.1.13-MariaDB, for Linux (x86_64) using readline 5.1


Я не буду подробно акцентироват внимание на конфигурировании, лишь общие настройки.
Для начала следует обновить все пакеты

sudo pacman -Syu

Ставим всё необходимое, а именно apache, php, mysql, openssl (если необходим доступ по https) и т. д.

sudo pacman -S apache php php-apache mysql openssl

Если mysql не стоял ранее:

sudo systemctl start mysqld
sudo mysql_secure_installation

Можно попробовать проверить работоспособность сервера базы

mysql -u root -p



Мне нравится способ конфигурирования apache в ubuntu, поэтому переделаем настройки на убунтуподобность)
Открываем httpd.conf

sudo nano /etc/httpd/conf/httpd.conf

и в конец файла добавляем:

IncludeOptional conf/sites-enabled/*.conf
IncludeOptional conf/mods-enabled/*.conf

Это позволит подхватывать все конфиги из {sites, mods}-enabled директорий.


Теперь создадим указанные каталоги:

sudo mkdir /etc/httpd/conf/{sites-available,sites-enabled,mods-available,mods-enabled}

Для включения/выключения сайтов создадим скрипт.
Я не стал брать скрипты из ubuntu из-за их монстроузости, вместо этого в интернете нашёл вполне подходящие для наших целей.

Первый скрипт. «Включает» выбранный конфиг сайта.

sudo nano /usr/sbin/a2ensite
#!/bin/bash
if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled  ; then
echo "-------------------------------"
else
echo "Error!! Folders /etc/httpd/conf/sites-available & etc/httpd/conf/sites-enabled not found."
exit 0
fi

avail=/etc/httpd/conf/sites-available/$1.conf
enabled=/etc/httpd/conf/sites-enabled
site=`ls /etc/httpd/conf/sites-available/`

if [ "$#" != "1" ]; then
        echo "Use script: a2ensite site_config"
        echo -e "\nAvailable virtual hosts:\n$site"
        exit 0
else
if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart Apache server: sudo systemctl restart httpd"
else
echo  -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site"
exit 0
fi
fi

Делаем скрипт выполняемым.

sudo chmod +x /usr/sbin/a2ensite



Второй скрипт. «Выключает» выбранный конфиг сайта.

sudo nano /usr/sbin/a2dissite
#!/bin/bash
if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled  ; then
echo "-------------------------------"
else
echo "Error!! Folders /etc/httpd/conf/sites-available & etc/httpd/conf/sites-enabled not found."
exit 0
fi

avail=/etc/httpd/conf/sites-enabled/$1.conf
enabled=/etc/httpd/conf/sites-enabled
site=`ls /etc/httpd/conf/sites-enabled`

if [ "$#" != "1" ]; then
        echo "Use script: a2dissite site_config"
        echo -e "\nEnabled virtual hosts: \n$site"
        exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nsudo systemctl restart httpd"
exit 0
fi
fi

Делаем скрипт выполняемым.

sudo chmod +x /usr/sbin/a2dissite


Теперь создадим скрипты включения/отключения модулей

sudo nano /usr/sbin/a2enmod
#!/bin/bash
if test -d /etc/httpd/conf/mods-available && test -d /etc/httpd/conf/mods-enabled  ; then
echo "-------------------------------"
else
echo "Error!! Folders /etc/httpd/conf/mods-available & etc/httpd/conf/mods-enabled not found."
exit 0
fi

avail=/etc/httpd/conf/mods-available/$1.conf
enabled=/etc/httpd/conf/mods-enabled
mods=`ls /etc/httpd/conf/mods-available/`

if [ "$#" != "1" ]; then
        echo "Use script: a2enmod mod_name"
        echo -e "\nAvailable mods config:\n$mods"
        exit 0
else
if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail mod not exist! Please create one!\n$mods"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart Apache server: sudo systemctl restart httpd"
else
echo  -e "Mod $avail does not exist!\nPlease see avail mods:\n$mods"
exit 0
fi
fi

Делаем скрипт выполняемым.

sudo chmod +x /usr/sbin/a2enmod



И второй скрипт (ну или 4 =) )

sudo nano /usr/sbin/a2dismod
#!/bin/bash
if test -d /etc/httpd/conf/mods-available && test -d /etc/httpd/conf/mods-enabled  ; then
echo "-------------------------------"
else
echo "Error!! Folders /etc/httpd/conf/mods-available & etc/httpd/conf/mods-enabled not found."
exit 0
fi

avail=/etc/httpd/conf/mods-enabled/$1.conf
enabled=/etc/httpd/conf/mods-enabled
mods=`ls /etc/httpd/conf/mods-enabled`

if [ "$#" != "1" ]; then
        echo "Use script: a2dismod mod_config"
        echo -e "\nEnabled mods: \n$mods"
        exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail mod does not exist! Exiting"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail mod!"
else
echo  -e "Success! $avail has been removed!\nsudo systemctl restart httpd"
exit 0
fi
fi

Делаем скрипт выполняемым.

sudo chmod +x /usr/sbin/a2dismod


Создаём виртуальный хост

sudo nano /etc/httpd/conf/sites-available/localhost.conf

Пример конфигурации:

<VirtualHost *:80>
    DocumentRoot "/mnt/srv/www/localhost/public"
    <Directory "/mnt/srv/www/localhost/public">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ServerName localhost
    ErrorLog "/mnt/srv/www/logs/localhost.error.log"
    CustomLog "/mnt/srv/www/logs/localhost.access.log" combined
</VirtualHost>

Теперь его можно включить

sudo a2ensite localhost
$ sudo a2ensite localhost
-------------------------------
Success!! Now restart Apache server: sudo systemctl restart httpd

и добавить в /ets/hosts адрес если это требуется, попробовать запустить/перезапустить apache (как подсказывает скрипт)


Я попробовал перезапустить apache, и на данном этапе у меня всё работает.
Нужно уже браться за мод ssl. Но сначала напишем скрипт создания сертификатов, и создадим их.

sudo nano /usr/sbin/agenssl
#!/bin/bash
if test -d /etc/httpd/conf/ssl ; then
echo "..."
else
echo "make dir..."
mkdir /etc/httpd/conf/ssl
fi

cd /etc/httpd/conf/ssl

echo -e "Enter your virtual host FQDN"
read cert

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt

echo -e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!"

ls -all /etc/httpd/conf/ssl
exit 0

Сделаем скрипт выполняемым

sudo chmod +x /usr/sbin/agenssl



Можно смело запускать. Из обязательного нужно заполнить «Common Name (e. g. server FQDN or YOUR name) []», указав в качестве имени адрес сайта.

sudo agenssl
$ sudo agenssl
...
Enter your virtual host FQDN
localhost
.....................+++
..............................................................................+++
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Signature ok
subject=/C=RU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=localhost
Getting Private key
The certificate localhost has been generated!

Please link it to Apache SSL available website!
drwxr-xr-x 2 root root 4096 апр 19 23:43 .
drwxr-xr-x 8 root root 4096 апр 19 21:27 ..
-rw-r--r-- 1 root root 1164 апр 19 23:43 localhost.crt
-rw-r--r-- 1 root root  985 апр 19 23:43 localhost.csr
-rw------- 1 root root 1704 апр 19 23:42 localhost.key


Мод ssl

sudo nano /etc/httpd/conf/mods-enabled/ssl.conf
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Listen 443
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/run/httpd/ssl_scache(512000)"
SSLSessionCacheTimeout  300

Включаем его

sudo a2enmod ssl
$ sudo a2enmod ssl
-------------------------------
Success!! Now restart Apache server: sudo systemctl restart httpd



Попробуем добавить конфигурацию виртуального хоста с ssl

sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf
<VirtualHost *:443>
    ServerAdmin webmaster@localhost
    ServerName localhost
    DocumentRoot /mnt/srv/www/localhost/public

    LogLevel info ssl:warn

    <Directory "/mnt/srv/www/localhost/public">
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog "/mnt/srv/logs//localhost.error.log"
    CustomLog "/mnt/srv/logs/localhost.access.log" combined

    SSLEngine on
    SSLCertificateFile      /etc/httpd/conf/ssl/localhost.crt
    SSLCertificateKeyFile   /etc/httpd/conf/ssl/localhost.key

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>

    BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>

Перезапускаем apach и пробуем наш https

sudo systemctl restart httpd
2016   apache   archlinux   lamp   linux   mysql   PHP   Заметка на память

Пост о локали, кедах, арче и забытом методе KISS

Вот уже битый час я не мог понять с какого перепугу моя локаль установлена в cu_RU.US-ASCII
Да и чёрт бы с ней, но ведь некоторые программы из под юзера мешает запускать.
Перечитал все мануалы, облазил форумы, но ни о этой локале не о багах связанных с этим толком ничего не написано. Перерыл все возможные системные файлы, прошелестел в домашней директории, но ничего.

Я уже было отчаялся и пошёл по самому простому пути (хотя это было логичней), поискать cu_RU.US-ASCII

Через минуту grep весело моргнул строчкой на экране.

~/.config/plasma-localerc

с содержимым

[Formats]
LANG=cu_RU.US-ASCII

[Translations]
LANGUAGE=ru

«Тьфу ты...», подумал я. Поправил кодировку, удалил ~/.config/plasma-locale-settings.sh и ушёл в ребут для верности...

2016   archlinux   kde   linux   locale

Ставим tomcat, настраиваем apache + jk коннектор

Предупреждение

Данный текст написан новичком в настройке tomcat да и в целом Java.

Установка

Установка достаточно простая, заходим в консоль и ставим tomcat. Надеюсь у вас стоит Java и apache? ;)

sudo pacman -Suy tomcat8 tomcat-native

Включаем сервис

systemctl enable tomcat8.service

Стартуем ...

sudo systemctl start tomcat8.service

Коннектор JK я буду ставить из aur:

yaourt -S mod_jk

На этом собственно всё. Заходим на http://localhost:8080 проверять работает ли tomcat.
Если всё в порядке, то вы должны увидеть что-то вроде этого

Настройка

Тут я напишу о простой настройке, не вникая в подробности.

По умолчанию файлы конфигурации хранятся в /etc/tomcat8/.
Первым делом настроим пользователей. А то вы наверное уже потыкали кнопочки Server Status, Manager App, а там просят какой то пароль? =)

Открываем tomcat-users.xml

sudo nano /etc/tomcat8/tomcat-users.xml

И приводи его к такому виду:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="tomcat" password="tomcatpswd" roles="manager-gui,admin-gui"/>
</tomcat-users>

И не забываем сменить username и password!

//Вот теперь можно пробежаться по кнопочкам Server Status, Manager App, Host Manager. Но перед этим лучше рестартонуть сервер.

sudo systemctl restart tomcat8.service

хотя пока рано. Но вдруг не терпится)//

Теперь некоторые настройки сервера. Лучше предварительно сделать бэкап файла server.xml

И заменить его содержимое следующими настройками:

sudo nano /etc/tomcat8/server.xml
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">

    <Connector port="8487" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

    <Engine name="Catalina" defaultHost="localhost">

      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>

      <Host name="java.local" appBase="/mnt/raid/domains/java.local">
        <Context path="" docBase="html"/>
      </Host>

    </Engine>
  </Service>
</Server>

В этом файле я поменял порт коннектора HTTP с 8080 на 8487, т. к. 8080 достаточно популярный и часто бывает занят. Так же добавил ещё один тег Host, в котором указал путь до папки. Т. е. localhost остался, и до панели можно достучаться по адресу localhost:8487

Настроим коннектор jk.

Добавляем в файл /etc/httpd/conf/httpd.conf строчку

Include conf/extra/java-jk.conf

Теперь

LoadModule jk_module modules/mod_jk.so

к директиве LoadModule

Создадим и заполним java-jk.conf

sudo nano /etc/httpd/conf/extra/java-jk.conf

Приводим к такому виду

<IfModule jk_module>
  JkWorkersFile "/etc/httpd/conf/extra/workers.properties"
  JkLogFile "/var/log/tomcat8/mod_jk.log"
  JkLogLevel info
  JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</IfModule>

А рядом положим worker.properties

sudo nano /etc/httpd/conf/extra/workers.properties
workers.tomcat_home=/usr/share/tomcat8
workers.java_home=/usr/lib/jvm/java-8-openjdk/

# unix stile
ps=/

worker.list=ajp13

# ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
worker.ajp13.lbfactor=1

Пока не знаю по какой причине, но jk мне выдавал ошибку (спасибо логам), что не может найти директорию log
в /etc/httpd/. Я ещё не разбирался, и просто создал требуемую директорию.

Настроим vhost у apache.

<VirtualHost java.local:80>
  ServerAdmin admin@java.local
  ServerName java.local
  DocumentRoot /mnt/raid/domains/java.local/html
  ErrorLog /mnt/raid/domains/java.local/logs/error.log
  CustomLog /mnt/raid/domains/java.local/logs/access.log common
  JkMount /* ajp13
</VirtualHost>

Пропишем имя в hosts

sudo nano /etc/hosts
127.0.0.1 java.local

И перезапускаем apache и tomcat

sudo systemctl restart httpd.service
sudo systemctl restart tomcat8.service

Размещаем в нашей директории (в моём случае /mnt/raid/domains/java.local/html) тестовый html файл с именем index.html. К примеру такой:

<html>
<head>
  <title>example static</title>
</head>
<body>
  <h2>Hello, Java!</h2>
</body>
</html>

Теперь пробуем перейти на java.local

И если всё правильно, то увидим нашу надпись.

Видим? Значит статика работает. На этом пока всё. Кстати, не стоит забывать менять пути на свои ;)

Archlinux, KDE, Dvorak и клавиатура DNS

Dvorak, KDE, Archlinux

Пишу эту статью на раскладке Дворака. Пока это даётся с большим трудом, но уже немного начинаю привыкать.
В иксах нет Русской раскладки Дворака, или может быть просто я её не нашёл, но это уже не важно, так как я подготовил файлы которые её добавляют.
Скачать файлы можно, с github https://github.com/LightAir/DvorakRus

Хоть я и подготовил бэкапы, но всё же рекомендую это сделать и Вам.

Теперь нужно скопировать (заменить) файлы base.xml, base.lst, evdev.xml, evdev.lst в папку /usr/share/X11/xkb/rules/ a файл ru в папку /usr/share/X11/xkb/symbols/

Далее идём в настройки -> устройства ввода -> раскладки -> добавить и добавляем Английскую и Русскую раскладки дворака.

Для удобства, я назвал их usd и rud

Теперь изменим дествие на правом Alt

Готово.

Клавиатура DNS

Я откопал пыльную клавиатуру, которую потрепала жизнь, хотя ей пользовались раза 3, не больше. Что поделать, Китай.

Приступаем к трепанации. Отвёртка...

В 90х каждый шерпотрепный Китайский магнитофон был с такой пайкой.

Снимаем плёнку.

Снимаем часть клавиш

Собираем вот по этой картинке

Вауля

Собираем обратно

Тут я убрал ножом риски

И сделал выемки на U и H

За дело берётся шкурка

Благо Русский алфавит нанесён обычной печатью. Спасибо Китаю за это))

Осталось только почистить её

Заключение

Остались некоторые проблемы с горячими клавишами, но в скором времени я их решу

Тренироваться можно тут http://klava.org

2015   archlinux   dvorak   kde   linux