воскресенье, 2 августа 2015 г.

Уменьшение частоты процессора на смартфоне под управлением Cyanogenmod

Так случилось, что несколько лет назад я стал владельцем смартфона Samsung S4 Active. Всем смартфон хорош, вот только производитель в погоне за обывательскими «попугаями» разогнал процессор Snapdragon 600 APQ8064T до частоты 1.9 ГГц, что превратило его в печку, приводя в лучшем случае быстрому разряду аккумулятора, а в худшем — его вздутие с одновременным выдавливанием экрана или же выходом из строя звукового чипа.

На стоковой прошивке частота процессора регулировке не поддавалась даже из под консоли. Вернее регулировка носила очень непродолжительный характер, после чего сбрасывалась на максимальное значение. На CyanogenMod 12.X все наконец-то заработало.

Внимание, все дальнейшие телодвижения вы делаете на свой страх и риск.

Изначально нужно иметь смартфон с установленным CyanogenMod`ом, мозги и прямые руки.

Итак начнем.

Активируем root на смартфоне:
1. «Настройки» → «О телефоне», тыкаем много раз пальцем в «Номер сборки».
2. «Настройки» → «Для разработчиков» → «Режим суперпользователя»

Параметр ядра отвечающий за максимальную частоту процессора:

/sys/power/cpufreq_max_limit

Возможные значения частоты:

/sys/power/cpufreq_table

Для автоматической установки частоты при запуске в /etc/init.d обнаруживаем:

/etc/init.d/90userinit

В котором содержится фрагмент кода для запуска файла:

/data/local/userinit.sh

Данного файла не оказалось, поэтому создадем его. В консоли он создается так:

touch /data/local/userinit.sh

Открываем его в штатном редакторе Cyanogenmod`а и пишем в него:

#!/system/bin/sh
echo 1242000 > /sys/power/cpufreq_max_limit

Где 1242000 — частота процессора для моего смартфона, свои частоты смотрите в /sys/power/cpufreq_table

Выключаем root: «Настройки» → «Для разработчиков» → «ВЫКЛ»

Перезагружаем смартфон и радуемся.


Файл userinit.sh лучше сохранить на карте памяти смартфона, вы тем самым после обновления прошивки избавите себя от массы описанных выше телодвижений. Всего-то придется скопировать userinit.sh в /data/local и перезагрузить смартфон.

суббота, 9 мая 2015 г.

Установка Syncthing на домашний сервер

Syncthing — Программа для синхронизации файлов и резервного копирования по протоколу обмена блоками между устройствами.

Устанавливать syncthing буду на сервер под управлением Debian GNU/Linux Jessie.

  • Для пущей безопасности создаем отдельного пользователя/группу syncthing
adduser --system --group --home /home/syncthing syncthing
  • Создаем скрытый каталог для установки приложения syncthing
mkdir /home/syncthing/.bin
  • Идем на сайт https://syncthing.net/, скачиваем свежую версию syncthing и распаковываем ее в каталог /home/syncthing/.bin
  • На всякий случай зададим права на /home/syncthing
chown -R syncthing:syncthing /home/syncthing
chmod u=rwX,g=rX,o= /home/syncthing
  • Создаем в /etc/systemd/system файл syncthing@.service, содержащий код:
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %I
Documentation=https://github.com/syncthing/syncthing/wiki
After=network.target

[Service]
User=%i
Environment=STNORESTART=yes
ExecStart=/home/syncthing/.bin/syncthing -no-browser -logflags=0
Restart=on-failure
SuccessExitStatus=2 3 4
RestartForceExitStatus=3 4

[Install]
WantedBy=multi-user.target

  • Создаем в /etc/systemd/user файл syncthing.service, содержащий код:
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization
Documentation=https://github.com/syncthing/syncthing/wiki
After=network.target

[Service]
Environment=STNORESTART=yes
ExecStart=/home/syncthing/.bin/syncthing -no-browser -logflags=0
Restart=on-failure
SuccessExitStatus=2 3 4
RestartForceExitStatus=3 4

[Install]
WantedBy=default.target

  • Включаем службу syncthing:
systemctl enable syncthing@syncthing.service
  • Запускаем службу:

systemctl start syncthing@syncthing.service

  • Проверяем /home/syncthing/.config/syncthing/config.xml на следующие опции:
<startBrowser>false</startBrowser> 
т.е. при запуске службы syncthing не запускался браузер.

<address>:8000</address>
порт для подключения к вебинтерфейсу syncthing (я для удобства сделал его равным 8000)
  • Чтоб подключиться к вебинтерфейсу synching набираем в браузере адрес http://ip-адрес-сервера:8000/

Miredo, network-manager & systemd


Miredo - клиент для подключения к протоколу teredo, предназначенному для передачи ipv6 пакетов через ipv4 сеть. Простыми словами, miredo дает возможность получить доступ в ipv6 сети, даже если провайдер этого не позволяет.

Столкнулся с трудностью запуска miredo. Экран загрузки ругался на: Invalid hostname "teredo.remlab.net", miredo запускался, но ipv6 туннель не создавал. Ручной запуск службы позволял работать до первой проблемы с сетью, да и сам режим ручного вмешательства для меня не был вариантом.

Для решения данной проблемы нужно сделать:

  • Выключить службу miredo.service
systemctl disable miredo.service
  • Скопировать файл службы miredo.service из /lib/systemd/sysyem в /etc/systemd/system
  • Отредактировать /etc/systemd/system/miredo.service так, чтобы он запускался только после появления интернета, т. е.: After=network-online.target вместо After=network.target
  • Включить службу miredo.service:
systemctl enable miredo.service
  • Чтобы событие network-online.target работало, необходимо активировать службу NetworkManager-wait-online.service
systemctl enable NetworkManager-wait-online.service
  • Запустить службы:
systemctl start NetworkManager-wait-online.service
systemctl start miredo.service
  • Проверяем работоспособность:
ping6 ipv6.google.com