Сьогодні я хочу розказати про мій досвід осягнення консольних команд для Raspberry Pi і загалом для Debian “squeeze” Linux. Він буде корисним для таких самих новачків світу Linux як я.
Фактично у консолі Linux я донедавна не працював, вона нагадує старий добрий DOS і має свою специфіку. Хоча все воно вийшло із стін Bell Laboratories в 70х роках, але продовжує розвиватися окремо.
Спочатку як рядовий юзер Windows я просто не уявляв роботу в Linux без графічної оболонки. Як захоплений глядач я спостерігав за фокусниками-програмерами, які вже мали навики роботи в консолі. Купа незнайомих рухів і команд, і все так швидко – майже магія. Згодом я трохи освоївся і зрозумів що консоль це дуже зручна і потужна штука під чорним тлом якої приховано величезний потенціал різноманітних модулів і підпрограм, і вона мені все більше і більше подобається. Всього я ще не знаю але приведу три основині підказки, щоб вам було простіше працювати на початку:
1. Буфер обміну. Щоб щось скопіювати в буфер обміну просто виділіть його мишею. Для вставки – натисніть одночасно праву і ліву кнопки миші або просто Shift+Insert (щось схоже було і під DOS-ом, здається). До речі, багато консольних команд в Linux і DOS співпадають!
2. Історія команд. Консоль люб’язно пам’ятає певну кількість останніх команд яку ви вводили. Щоб повернутися до них просто використовуйте стрілки вгору-вниз ↑ ↓ на клавіатурі.
3. Підказка. Консоль має потужний інструмент “прогнозування” того що ви вводите. Просто почніть набирати команду а далі натисніть клавішу TAB⇆ і ви отримаєте бажаний текст. Якщо ж бажаного тексту немає… спробуйте швидко натиснути TAB⇆ 2 рази – і ви отримаєте список можливих продовжень, серед яких буде ваша команда, це якщо ви не помилилися при вводі 😉
Про початкові налаштування платки і все що із цим пов’язано можна також почитати тут: http://elinux.org/RPi_Beginners
Зміст
3. Як оновити Raspberry Pi firmware
4. Створення нового користувача
5. Видалити користувача разом із папками
6. Налаштування статичної IP адреси
7. Налаштування авто запуску демонів (сервісів)
11. Установка MySQL, Apache, PHPMyAdmin, gcc, libmysql++
12. Відкат / установка PHP 5.3.18
13. Дати доступ до MySQL назовні через Ethernet
14. Активувати mod_rewrite для Apache
15. Перевірка підключених USB-Serial конверторів / портів
16. Відкрити доступ користувачу до USB-Serial портів
17. Переглянути вільне місце на диску (картці)
18. Розпаковка архівів *.tar.gz
19. Установка прав на директорію/файл
20. Установка прав для користувача
21. Ініціалізація crontab демона
Відразу про те, що я для себе наразі відкрив, поправте якщо я не прав.
В Linux запис “/directory” означає що тека directory знаходиться у корені тобто “/” – це корінь диску.
Запис “~/directory” означатиме що тека directory знаходиться у теці поточного користувача, і якщо користувач має ім’я “user” то цей запис рівноцінний запису “/home/user/directory“. Це спрощує запис команд і пришвидшує роботу.
Запис “./filename” означатиме що буде виконуватися запуск файлу з поточної теки, тобто “./” – це поточна тека. В Linux розширення файлів не має значення – важливі його атрибути. Наприклад якщо файл можливо “запустити” як програму – то він має атрибут “executed”.
Linux із самого початку розроблявся як багатокористувацька система, тому зазвичай є один “адміністратор” (sudo або root) під паролем, який має доступ до всіх фалів і папок, включно із системними. Є користувачі, зона дії яких зазвичай обмежена його “домашньою” текою (щось на зразок “Мої документи” у Windows). Наприклад користувач user1 може виконувати будь які дії лише у своїй теці /home/user1/ і ніде інше.
Тепер про структуру тек. Структура розміщення файлів може змінюватися в різних дистрибутивах Linux, але зазвичай вона має вигляд:
- / – Коренева директорія для всієї ієрархії
- /bin/ – виконавчі файли програм користувача
- /boot/ – статичні файли для завантаження системи
- /dev/ – файли пристроїв
- /etc/ – специфічні файли конфігурацій системи
- /home/ – домашні теки користувачів
- /lib/ – загальні бібліотеки та модулі ядра
- /media/ – точка монтування для з’ємних пристроїв
- /mnt/ – точка монтування для тимчасових файлових систем
- /opt/ – додаткові пакети програмного забезпечення
- /sbin/ – системні виконавчі файли
- /srv/ – дані для сервісів системи
- /tmp/ – тимчасові файли
- /usr/ – користувальницькі утиліти та додатки
- /var/ – змінювані файли (змінні)
- /root/ – домашня папка користувача root (адміністратора)
- /proc/ – ядро документів віртуальної файлової системи, статуси процесів у вигляді текстових файлів
Всі (або більшість) дій в ОС Linux відбуваються через файли. Наприклад під’єднали ви якійсь девайс до USB порту, у теці /dev з’явиться відповідний файл usbdevxxx. Ви безпосередньо текстовим редактором відкрити його не зможете, але він “віртуально” відповідатиме за роботу із підєднаним девайсом. Щоб у девайс щось записати треба програмою відкрити файл – щось записати і закрити файл. Зручно.
Перед початком відразу рекомендую встановити текстовий редактор nano і двопанельний файловий менеджер midnight commander (щось схоже на FAR, Norton Commander або DosNavigator), без цих інструментів я собі не уявляю роботу у командній стрічці. Для їх установки виконайте команду:
> sudo apt-get install mc nano |
Отож почнемо. Одразу після першого завантаження Raspberry Pi (надалі просто малина або Pi) система сама запропонує виконати основні налаштування платки. Виконайте наступну команду:
> sudo raspi-config |
Відкриється наступне інтуїтивно зрозуміле меню, яке дозволить швидко налаштувати малину, а саме: розвернути образ Лінукса на всю пам’ять SD-картки (спочатку є 2Гб), трошки “розігнати” процесор, встановити ваш часовий пояс, тощо.
Після налаштувань, як правило необхідне перезавантаження системи, виконуємо його командою:
> sudo reboot |
3. Як оновити Raspberry Pi firmware
Із заводу малина можливо прийшла до вас не із самою новою прошивкою. Я рекомендую її періодично оновлювати, це дозволить мати вам менше проблем із зовнішніми девайсами і непередбачувальною поведінкою платки. Інсталюйте утиліту:
> sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update && sudo chmod +x /usr/bin/rpi-update |
Переконайтесь що встановлений коректний час (команда > data). Запустіть NTP сервіс якщо це потрібно (команда > sudo service ntp start). Також встановіть сертифікати:
> sudo apt-get install ca-certificates |
Інсталюйте додаткові утиліти для ядра:
> sudo apt-get install git-core |
Оновіть внутрішнє ПЗ (firmware):
> sudo rpi-update |
4. Створення нового користувача
Введіть наступну команду у вікні терміналу, щоб створити нового користувача:
> sudo adduser <username> |
Для того щоб новий користувач був адміністратором або по інакшому “sudo“, наберіть:
> sudo visudo |
І додайте у файл наступний рядок:
<username> ALL=(ALL) NOPASSWD: ALL |
Окрім того, замість додавання користувача в список sudo, ви можете додати користувача до групи sudo за допомогою наступної команди:
> sudo adduser <username> sudo |
5. Видалити користувача разом із папками
Ключ -r дозволяє видалити також всі папки, які належать даному користувачеві.
> userdel -r <username> |
6. Налаштуваннястатичної IP адреси
У більшості випадків сервер під Linux повинен мати статичну IP адресу у мережі, для її налаштування відкриваємо конфігураційний файл:
> sudo nano /etc/network/interfaces |
І вписуємо наступні рядки (в даному випадку статична адреса буде: 192.168.0.133).
# loopback auto lo
iface lo inet loopback # local IP auto eth0 #iface eth0 inet dhcp iface eth0 inet static address 192.168.0.133 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 |
Після зміни – перезапускаємо мережу
> sudo /etc/init.d/networking restart |
або так:
> sudo service networking restart |
Додаткові команди для перевірки налаштувань, поточні налаштування мережі:
> ifconfig -a |
і таблиця маршрутизації:
> route |
7. Налаштування авто запуску демонів (сервісів)
По замовчуванню в системі крутиться багато непотрібних сервісів або демонів по термінології Linux, непотрібні я відключаю. Щоб Перевірити поточний ранлевел (поточний runlevel=2 для командної стрічки зазвичай)
> runlevel |
Встановити утиліту:
> sudo apt-get install sysv-rc-conf |
Відключити запуск непотрібних демонів (samba, nfs etc..) до деякого ранлевела – наприклад можливо залишити дозвіл їм запускатися у графічному режимі:
> sudo sysv-rc-conf |
Чесно. Не знаю чи треба, але пишуть що: Using dash as the system shell will improve the system’s overall performance. Тому Виконуємо команду, та вибираємо < Yes >
> dpkg-reconfigure dash |
Видалити файли необхідні для графічного інтерфейсу(якщо він вам не треба звісно):
> sudo apt-get remove gnome> sudo apt-get remove gvfs |
Очистка реєстру програм:
> sudo apt-get autoremove> sudo apt-get autoclean |
Перегляд поточного імені:
> hostname |
Змінюємо ім’я хоста в першому файлі на потрібне:
> sudo nano /etc/hostname |
Запускаємо скрипт для застосування змін:
> sudo /etc/init.d/hostname.sh start |
Перезавантажуємось:
> sudo reboot |
Змінюємо ім’я хоста в другому файлі на потрібне:
> sudo nano /etc/hosts |
11. Установка MySQL, Apache, PHPMyAdmin, gcc, libmysql++
Щоб мати можливість почати програмувати під Linux потрібно встановити зокрема gcc компілятор а також зручну лібу libmysql++ для роботи із базами даних MySQL на С++ а також іші програмні модулі:
> sudo apt-get install mysql-server mysql-client phpmyadmin libmysql++-dev gcc |
12. Відкат / установка PHP 5.3.18
Тепер про те як встановити потрібний PHP для вашого сервера. Справа в тому що для моєї задачі треба було встановити PHP версії не вище 5.3.18. Тоді як з поточних репозиторіїв ставилася новіша версія, на якій не працювали потрібні мені скрипти. Я довго бився над даною задачею, і вирішенням якої вам приводжу:
Скачати в тимчасову папку PHP потрібної версії (наприклад звідси: http://ua2.php.net/get/php-5.3.18.tar.gz/from/a/mirror):
> cd ~/p/php-5.3.18/ |
Розархівувати архів:
> tar xvfz *.tar.gz |
Встановити всі необхідні додаткові бібліотеки:
> sudo apt-get install apache2-prefork-dev libcurl4-gnutls-dev libjpeg8-dev libpng12-dev libfreetype6-dev libmcrypt-dev libtidy-dev libexpat1-dev libxslt1-dev libltdl-dev |
Встановити «ярлик» для бібліотеки libexpat1-dev:
> sudo ln -s /lib/arm-linux-gnueabihf/libexpat.so.1.6.0 /usr/lib/libexpat.so |
Конфігурування PHP:
> sudo ./configure –with-apxs2=/usr/bin/apxs2 –with-curl –with-gd –enable-gd-native-ttf –with-freetype-dir –with-gettext –with-jpeg-dir=/usr/local/lib –with-freetype-dir=/usr/local/lib –with-kerberos –with-openssl –with-mcrypt –with-mhash –with-mysql –with-mysqli –with-pcre-regex –with-pdo-mysql –with-libxml-dir –with-xsl –with-pear –with-png-dir –with-zlib –with-zlib-dir –enable-zip –with-iconv –enable-bcmath –enable-calendar –enable-ftp –enable-magic-quotes –enable-sockets –enable-mbstring –enable-sqlite-utf8 –with-xsl –with-xmlrpc –enable-exif –enable-soap –with-tidy –with-libexpat-dir=/usr/lib –enable-gd-native-ttf –disable-fileinfo |
Компіляція (близько 2х годин!!! – Pi це ж вам не 8 ядерний ксенон…)
> sudo make clean> sudo make
> sudo make install |
Скопіювати «правильний» файл php.ini, або взяти стандартний:
> sudo cp /etc/php5/cli/php.ini /usr/local/lib/ |
Перезапустити Апач:
> sudo service apache2 restart |
Забороняємо PHP надалі оновлюватися (по apt-upgrade), щоб зафіксувати саме потрібну нам версію в системі. Показати інстальовані пакети (які на треба зафіксувати):
> dpkg –get-selections | grep php |
Включаємо заборону:
> sudo -i> echo “php5-cli hold” | dpkg –set-selections
> echo “php5-common hold” | dpkg –set-selections > echo “php5-gd hold” | dpkg –set-selections > echo “php5-mcrypt hold” | dpkg –set-selections > echo “php5-mysql hold” | dpkg –set-selections |
Як зняти дану заборону (далі по аналогії):
> echo “php5-cli install” | dpkg –set-selections |
13. Дати доступ до MySQLназовні через Ethernet
По замовчування ви не зможете зайти на сервер MySQL окрім як з localhost, тому якщо потрібна можливість роботи з БД ззовні – треба це дозволити.
Відкрити файл:
> sudo nano /etc/mysql/my.cnf |
Закоментувати параметр:
#bind-address = 127.0.0.1 |
14. Активувати mod_rewrite для Apache
Щоб активувати mod_rewrite модуль (для роботи в PHP):
> a2enmod rewrite |
Редагуємо файл:
> sudo nano /etc/apache2/sites-available/default |
Замість:
Options Indexes FollowSymLinks MultiViewsAllowOverride None
Order allow,deny allow from all |
Замінити на:
Options Indexes FollowSymLinks MultiViewsAllowOverride all
Order allow,deny allow from all |
Перезавантажуємо Apache:
> service apache2 restart |
15. Перевірка підключених USB–Serialконверторів / портів
> ls /sys/class/tty | grep ttyUSB |
16. Відкрити доступ користувачу до USB–Serialпортів
> usermod -a -G dialout <username> |
17. Переглянути вільне місце на диску (картці)
> df –h |
18. Розпаковка архівів *.tar.gz
> tar xvfz *.tar.gz |
19. Установка прав на директорію/файл
> sudo chmod -R 777 <dir> |
20. Установка прав для користувача
> sudo chown -R <username> <dir> |
21. Ініціалізація crontabдемона
Демон задає розклад запуску тих чи інших задач або скриптів. Дуже зрічна штука коли потрібно запускати свої програми із певним періодом, або просто запустити якусь прогу при старті системи:
> sudo crontab -e -u <username> |
На цьому все. Як дізнаюсь щось новеньке – відпишу.