root 2 Linux Arch Windows 7 Windows 10 Tweaks 1 комментариев
|
Если ОС долго загружается
Долгое время ломал голову над интересным фактом: Имеется вполне современный даже по сегодняшним меркам компьютер: 2-ядерный Core i3, 16 Gb DDR4, NVME-накопитель со скоростью чтения 2.4 Гб\с. Но парадокс, система грузится долго. И Linux и Windows 7. С очень и очень странными симптомами: долгой начальной инициализацией.
Методом проб, ошибок, подстановок, нашел корень проблемы: UEFI. Точнее режим совместимости с Legacy и разметка NVMe-накопителя в MBR, а не GPT. Видимо системе требуется огромное время на переходы с одного режима в другой, а потом обратно + ядро системы пытается определить список оборудования самостоятельно вместо того чтобы просто получить его с EFI\ACPI.
Итак, если у вас вроде как современный компьютер, и вы чувствуете что ОС может загружаться быстрее, чем загружается - отключите в CMOS (Setup) все совместимости со старым режимом (Legacy, CSM и тд), оставив лишь UEFI, и будьте готовы полностью переразметить ваш NVMe (а может и SATA SSD) из старого режима MBR в новый GPT. Разумеется все системы придется переустановить заново, в режиме UEFI.
У меня это дало прирост загрузки с 20-30 сек с момента нажатия кнопки, до 3-5 секунд до появления рабочего стола. Новое оборудование должно работать в новом режиме. |
root 1 Linux CentOS Linux Debian Сетевое железо Mikrotik Домашний хостинг Без комментариев
|
Почему сетевой кабель имеет значение
Относительно долгое время мой домашний сервер мучала одна интересная проблема. Периодически уходил в оффлайн. Подключиться невозможно. Долгое время грешил на терморежим. Поставил вентилятор (там было пассивное охлаждение). Проблема не решилась. Поставил другие системы (метался между Дебианом, Убунтой и Центосью) - то же самое. Решил обвинить материнскую плату и железо. Написал скрипт который следит за состоянием сервера изнутри, образно говоря, каждую минуту пишет запись в лог. И о чудо, когда сервер "висит" - на самом деле он не висит, а работает. В чем я убедился когда подключил дисплей.
Стал грешить на сетевую подсистему. И правда. В логах нашел такое:
[ 304.008655] r8169 0000:02:00.0 enp2s0: link down [ 307.056987] r8169 0000:02:00.0 enp2s0: link up [ 318.711223] r8169 0000:02:00.0 enp2s0: link down [ 321.433996] r8169 0000:02:00.0 enp2s0: link up [ 330.291883] r8169 0000:02:00.0 enp2s0: link down [ 333.198115] r8169 0000:02:00.0 enp2s0: link up [ 334.441311] r8169 0000:02:00.0 enp2s0: link down [ 337.207600] r8169 0000:02:00.0 enp2s0: link up [ 338.095204] r8169 0000:02:00.0 enp2s0: link down [ 341.248507] r8169 0000:02:00.0 enp2s0: link up [ 356.632769] r8169 0000:02:00.0 enp2s0: link down [ 359.651745] r8169 0000:02:00.0 enp2s0: link up [ 687.127200] r8169 0000:02:00.0 enp2s0: link down [ 690.253646] r8169 0000:02:00.0 enp2s0: link up [ 694.503367] r8169 0000:02:00.0 enp2s0: link down [ 697.181026] r8169 0000:02:00.0 enp2s0: link up [ 703.279311] r8169 0000:02:00.0 enp2s0: link downКаждые несколько секунд сеть отключалась и подключалась. Само собой перво-наперво я подумал на роутер. Хоть и Mikrotik, но тем не менее достаточно старенький. Конечно это было бы странно, учитывая что другие устройства прекрасно с ним работали, но тем не менее роутер я поменял на вкусненький, гигабитненький, с 5-тигигагерцовым WiFi. Проблема осталась. Пришла очередь сетевой карты. Ее конечно я менять не стал (да и не смог бы, у меня все на MiniITX), однако на плате их две, и я попробовал другую с предсказуемым результатом: не поменялось ровным счетом НИЧЕГО. Вдобавок обнаружил интересную особенность: если достать-вставить кабель - сеть появляется, т.е. сервер перезагружать уже не нужно. Ну думаю, ладно, придется брать в руки паяльник и паять костыль на Arduine который будет перетыкивать этот сетевой кабель.
И тут меня дернул черт попробовать другой кабель. Все заработало. Сбоев нет. Интерфейс работает. Ничего не переподключается.
И я реально НЕ ПОНИМАЮ в чем проблема. Этот "нерабочий" патчкорд отлично прозванивается тестером. Работает на других системах. Он не работает только на этом сервере. Чудеса.
Мораль сего поста такова: если у вас стало слишком часто пропадать соединение - не спешите покупать новый роутер или переустанавливать систему. Просто попробуйте другой сетевой кабель.
P.S. этот сайт хостится именно на этом сервере. |
root 0 Умный дом Сделай сам InternetOfThings ESP8266 2 комментариев
|
Сенсорный WiFi выключатель на ESP8266
Решил сделать себе сенсорный выключатель на кухню.
Обычно такие штуки делаются на Ардуине, однако с учетом падения цен на ESP8266, и более жирными ресурсами, захотелось сделать это на ESP8266, и заодно убить этим выстрелом второго зайца - сделать выключатель WiFi управляемым.
Вот список того что я запланировал получить в итоге:
1. При включении (точнее первом подаче электричества вообще) выключатель должен подключаться к WiFi, а потом слать на домашний сервер свой IP и набор поддерживаемых фич. Хочу так сделать, чтобы унифицировать управление устройствами из одного центрального узла. Грубо говоря, выключатель сам добавляет себя в базу данных как выключатель, а потом центральная программа видит новое устройство "выключатель" и начинает с ним работать исходя из параметров которые этот выключатель прислал;
2. Выключатель должен уметь выключать и включать свет в автономном режиме, без наличия или отсутствия WiFi;
3. Выключатель так же должен уметь включать и выключать свет по сети, при чем без использования хитрожопых протоколов;
4. Соответственно выключатель должен уметь запоминать свое состояние и возвращать его по запросу из сети;
5. У выключателя должна быть подсветка в режиме ночника, на одном светодиоде;
6. Эта подсветка так же должна уметь включаться и выключаться по сети;
7. Разумеется это все должно иметь возможность быть запихнутым в бокс.
Самое проблемное и казалось сперва, и оказалось в итоге - это питание. Все дело в том, что ESP8266 - питается от 3.3в, и ладно бы этим все ограничилось, но нет, кроме ESP-шки там должно принимать участие как минимум два модуля, приемный и исполнительный, которые непонятно как себя поведут с 3.3в.
В качестве сенсоров у меня был выбор, выбрать подешевле и поменьше, или подороже и побольше. Оба были у меня куплены для других проектов.
Разумеется выбрал я красненький, из-за двух факторов: меньшего размера, и отсутствия на стороне сенсора шероховатостей в виде деталей и разъемов. Честно говоря, производитель правого сенсора головой видимо не думал. Ну да ладно.
Исполнительным механизмом я вначале хотел выбрать классическое реле, но потом отказался из-за щелчка, и из-за надежды на то, что не придется ставить дополнительные транзисторы, чтобы подружить ESP-шные 3.3 вольта с релюшными пятью. В итоге выбрал твердотельный Omron с питанием в 5в. Как оказалось дальше, не зря.
В качестве элемента питания использовал обычную пятивольтовую зарядку от мобильника, куда навесом напаял LM1117 (стабилизатор на 3.3в).
Родные кишки от выключателя за 30 гривен, я вытащил (видно на первой фотке), вместо этого приклеил сенсор силиконом на внутреннюю сторону того элемента, на который обычно нажимают.
В общем вся готовая конструкция на кухне выглядела вот так...
На удивление, и сенсор, и твердотельное реле - отлично работают от 3.3В.
Что касается программной части, то для нее я использовал Arduino IDE (в Арче лежит в стандартных репах) + плагин к ней. Язык отдаленно напоминает C++, а то и PHP. Специально перепрошивать ESP8266 ни под что не нужно, все шьется на лету, с закороченным GPIO0 (об этом лучше почитать в интернете, цель статьи - не научить вас шить ESP8266).
За прошивку я взял скетч веб-сервера из примеров, добавив туда необходимые фичи. С гордостью представляю его вам..
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> #include <ESP8266HTTPClient.h> const char* ssid = "u39_2.4G"; const char* password = ""; String ID="0001"; int status=0; ESP8266WebServer server(80); int n=0; void handleNotFound(){ String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i=0; i<server.args(); i++){ message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); } void setup(void){ Serial.begin(115200); Serial.println("Starting Jarvis module: switcher..."); // На пин 13 у нас подключен сенсор pinMode(13, INPUT); // На пин 13 у нас подключено реле pinMode(5, OUTPUT); // На пин 4 у нас подключена подсветка pinMode(4, OUTPUT); digitalWrite(5, 0); digitalWrite(4, 1); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("Connecting to WiFi: "); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); n++; // Если за 60 сек (0.5 * 120) нет wifi-подключения, ребутаем девайс. Потенциальный баг, в случае отсутствия WiFi девайс упадет в бесконечный ребут, пофиксю в след ревизии if (n==120) {Serial.println("[ FAIL ]");Serial.println("1 minute is gone, no connection, restarting...");ESP.reset();} } Serial.println(" [OK] "); HTTPClient http; String IP=WiFi.localIP().toString().c_str(); // Посылаем на сервер умного дома GET запрос с нашим IP и списком поддерживаемых фич // lightswitch означает что к этой IP можно будет обращаться http://192.168.1.X/lightswitch=1 или http://192.168.1.X/lightswitch=0 и это будет включать и выключать свет // backlight по сути означает то же самое, но для низкожрущей подсветки // remote означает то, что этим устройством можно управлять снаружи // alert - означает то, что это устройство поддерживает индикацию. Это можно использовать например для бесшумной индикации звонка в дверной звонок http.begin("http://192.168.1.2/init.php?ip="+IP+"&device=switcher&features=lightswitch,backlight,remote,alert&id="+ID); int httpCode = http.GET(); http.end(); Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (MDNS.begin("esp8266")) { Serial.println("MDNS responder started"); } // http://192.168.1.X/status вернет нам 0 или 1 в зависимости от того включен свет или нет server.on("/status", [](){ String st=String(status); server.send(200, "text/plain", st); }); // http://192.168.1.X/backlight=1 включит подсветку server.on("/backlight=1", [](){ digitalWrite(4, 1); server.send(200, "text/plain", "OK"); }); // http://192.168.1.X/backlight=1 выключит подсветку server.on("/backlight=0", [](){ digitalWrite(4, 0); server.send(200, "text/plain", "OK"); }); // http://192.168.1.X/lightswitch=1 включит свет server.on("/lightswitch=1", [](){ digitalWrite(5, 1); status=1; server.send(200, "text/plain", "OK"); }); // http://192.168.1.X/lightswitch=0 выключит свет server.on("/lightswitch=0", [](){ digitalWrite(5, 0); status=0; server.send(200, "text/plain", "OK"); }); server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started"); } void loop(void){ server.handleClient(); int value=digitalRead(13); // Если нажат сенсор, и свет выключен, то... if ((value==1)and(status==0)) { // Включаем свет digitalWrite(5, 1); // Меняем статус status=1; // Сбрасываем значение переменной сенсора. Если этого не сделать, то проверка ниже снова выключит свет value=0; delay(1000); } // Если нажат сенсор, и свет включен, то... if ((value==1)and(status==1)) { // Выключаем свет digitalWrite(5, 0); // Меняем статус status=0; // Сбрасываем значение переменной сенсора. Если этого не сделать, то проверка выше снова включит свет value=0; delay(1000); } delay(100); }Единственное что, светодиод подсветки я пока не припаял, выключатель работает в пилотном режиме, в связи с чем предоставляю вам видео, благодарю за чтение статьи, и готов ответить на вопросы, если такие появятся.
|
root 0 Умный дом Старое железо Tweaks Сделай сам Домашний хостинг Без комментариев
|
Vastking M910A firmware
Привет, друзья!
Есть у меня планшет, Vastking M910A. 9-ти дюймовый, с гигом ОЗУ, на двухъядерном Allwinner A20. В общем отличное железо за свои деньги. Эту железяку я использую для работы, а если точнее - для наблюдения за здоровьем клиентских серверов и сайтов. Висит себе на стене никого не трогает...
Как-то раз заглючило. Слетела прошивка. Пришлось переустанавливать, но прежде чем переустановил - сутки лазил искал по интернету, поскольку родной сайт vastking.com.ua - уже давно лежит.
Поэтому, рассказываю как вкратце прошить этот планшет, а так же саму прошивку без мокрых писечек.
Итак, Allwinner хоть и мудаки в своем роде, но загрузку ОС в своих процессорах организовали грамотно. Их устройства невозможно окирпичить, благодаря следующим нюансам: 1. Процессор ищет загрузчик последовательно на USB-флешке, затем на MicroSD-карте, и уже затем на внутренней памяти. Посему даже если у вас заглючила прошивка, или вообще стерлась, или вообще деградировала внутренняя память - всегда сможете загрузиться с внешнего устройства. 2. Процессор поддерживает так называемый FEL-режим. Режим прошивки, если по нашему. При чем сей режим может активироваться как аппаратно (включение планшета с зажатой кнопкой громкости +), так и программно. Подсунув устройству MicroSD-карту, хитрым образом отформатированную - мы переключаем наше устройство на Allwinner в режим прошивки безо всяких комбинаций клавиш.
Итак, чтобы перевести планшет в режим прошивки, нам понадобится MicroSD-карта любого размера, и файл, который можно скачать здесь: https://github.com/linux-sunxi/sunxi-tools/raw/master/bin/fel-sdboot.sunxi Этот файл нам нужно будет записать на нашу флешку. В Linux это будет выглядеть так: dd if=fel-sdboot.sunxi of=/dev/sdX bs=1024 seek=8 Где /dev/sdX - ваша MicroSD. Как это будет выглядеть в Windows, я честно говоря не знаю, но скорее всего там можно использовать DiskImage или что-то в этом роде. Далее вставляем нашу карточку в планшет, и подключаем кабель. Все. Планшет в режиме прошивки.
Сама прошивка находится здесь: https://minidevices.top/download/vastking_m910.img.zip
|
root 1 Информационная безопасность PHP Tweaks 2 комментариев
|
Переход на HTTPS
Не люблю я https. Нет, он нужен. Особенно когда вам нужно защитить свои персональные данные, передаваемые пароли к клиент-банкам, порно-видео и все такое. Но я не понимаю повсеместной мании всовывать его куда угодно, на сайты-визитки, странички своих домашних котиков и прочие никому не нужные поделия на Wordpress. Первое время браузеры прозрачно намекали, что мол, сайт не использует https. Затем акцентирование внимания на "небезопасности" сайта становилось все наглее и наглее, и как себя поведут заговорщики дальше - одному Богу известно. И да, я считаю повсеместный переход на https скорее сговором регистраторов сертификатов, нежели борьбой за безопасность пользователей интернета.
Несмотря на то, что Minidevices.info не хранит никакой персональной информации, кроме ника и пароля (и хранить не будет), не показывает рекламы мокрых писечек, и не сливает ваши данные ФСБ - я принял решение перевести этот сайт на протокол HTTPS. Пусть подавятся
Версия вебсайта с HTTPS уже активна и уже работает, версия с HTTP будет продолжать работать до первого марта 2018 года, после чего останется лишь HTTPS-версия.
Извините за доставленные неудобства, и спасибо что иногда меня читаете. |