Teclast P20HD, N6H3 – root method

Yes, device is ROOTable but require some time

  1. Recovery is not needed. You have to unlock bootloader using this metod.
  2. Use Linux (ubuntu for adb/fastboot)
  3. Find stock firmware, extract *.PAC file and modify boot/recovery file using MAGISK manager
  4. Now it’s time to sign custom image using self-signed certificate (image and vbmeta)
    1. [Tutorial] How to create a custom signed vbmeta.img for Unisoc using AVBtool
    2. [Tutorial] How to extract public keys from a vbmeta image
    3. [Tutorial] How to use AVBtool and a private key to sign a Unisoc (SPD) image
  5. If You have modified bootloader/recovery using magisk (magisk_patched.img), signed vbmeta_custom.img file using self-signed certificate, unlocked bootloader open Linux and
  6. type “adb reboot fastboot”
  7. start flashing two files
  8. fastboot –disable-verity –disable-verification flash vbmeta vbmeta_custom.img
  9. fastboot flash boot magisk_patched.img
  10. Finish :)

* If you fail, start again teclast P20HD, N6H – bricked bootloader! stuck at starting screen! – muszak.eu

* I have bad experience using windows, many steps can fail without reason, so… if you fail, think about linux/ubuntu/etc.

*mirror for avbtool

*Below is my chain_partition for avbtool.py based on vbmeta-sign.img

   avbtool.py make_vbmeta_image \      
  --key my_private_key.pem \      
  --algorithm SHA256_RSA4096 \        
  --flag 2 \      
  --chain_partition boot:1:keysimg/boot_key.img \     
  --chain_partition recovery:2:keysimg/recovery_key.img \     
  --chain_partition keysimg:3:keysimg/vbmeta_system_key.img \     
  --chain_partition vbmeta_vendor:4:keysimg/vbmeta_vendor_key.img \       
  --chain_partition l_modem:5:keysimg/l_modem_key.img \       
  --chain_partition l_ldsp:6:keysimg/l_ldsp_key.img \     
  --chain_partition l_gdsp:7:keysimg/l_gdsp_key.img \     
  --chain_partition pm_sys:8:keysimg/pm_sys_key.img \     
  --chain_partition odmko:9:keysimg/odmko_key.img \       
  --chain_partition socko:10:keysimg/socko_key.img \      
  --padding_size 16384 \      
  --output vbmeta-sign-custom.img

Raid-1 installation & recovery start

How to start with raid-1, by musznik.

  • * You neeed separate ext2 /boot partition – easest way is to add pendrive or third disk with that mount point
  •  /boot partition should be on stable ground, connect hdd to sata-1 input! to prevent from disk name change after failure.
  1. create software raid druing debian installation
  2. create exactly same partitions on /dev/sdc1 and /dev/sdd2 (disk one and two)
  3. assign proper mount point to raid partitions (/ for /dev/md0, /var for /dev/md1 etc)
  4. create small partition for /boot on external drive (additional hdd or usb)
  5. assign grub to partition where is /boot
  6. thats is..

ok? but my one disk fail! how to start with one disk in raid-1 on debian?

  1. grub cannot start system, but it still able to load linux kernel (ufff) from external /boot partition
  2. you can run system on one disk using below procedure
    1. stop all md* devices
      [code]mdadm –stop /dev/md*[/code]
    2. recreate raid-1
      [code]mdadm –assemble –scan[/code]
    3. we need “mkconf” command from /usr folder
      1. ​find partition where is /usr
      2. mount that folder
        [code]mkdir /tmp/help
        mount -t ext4 /dev/md0 /tmp/help[/code]
      3. backup current configuration and create new one
        [code]mv /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf.old
        /tmp/help/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf[/code]
  3. prepare new disk
    1. create exactly same partition size as working hdd (you can use degradated disk with old data, which was removed for test?)
    2. using this command
      [code]sfdisk -d /dev/sda > sfdisk /dev/sdb[/code]
    3. associate new hdd with raid-1
      [code]mdadm –manage /dev/md0 –add /dev/sdb1
      mdadm –manage /dev/md1 –add /dev/sdb5
      mdadm –manage /dev/md2 –add /dev/sdb6[/code]
    4. and so one…
    5. watch rebuilding process
      [code]watch -n 1 cat /proc/mdstat[/code]

 

There might be problem with SWAP partition. First stop whole swap (swapoff) or just restart system.

Atmega328 via Arduino IDE 1.5.x/1.0.x

Jak dobrze wiecie, albo i nie wiecie, nie musicie zakupywać “całych zestawów Arduino Uno,mini etc”, a sami zakupić scalak Atmega328p za kilka złoty, wgrać bootloader Arduino i cieszyć się półprawnym arduino.

Czego potrzebujemy?

Konfiguracja dotyczy pracy układu z zewnetrzny kwarcem 16Mhz!

  1. Atmega328 (np. od Seguro, tak obsługują paczkomaty :) )
  2. Programator USBasp (np. od electropark, brak paczkomatów :()
  3. Opcjonalnie konwerter USB<->UART (electropark) – jeżeli zamierzamy wygrywać soft klasycznie, czyli przez RX/TX via bootloader arduino, co nie jest konieczne i zależne od poniższej konfiguracji
  4. Modyfikacja pliku C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt

Dopisujemy na końcu pliku

Czytaj dalej „Atmega328 via Arduino IDE 1.5.x/1.0.x”

Atmega/Arduino – odczyt AVC

Jak odczytać własny poziom napięcia przez atmegę? w cale nie tak łatwo. Posiadam Atmegę32 z bootloaderem Arduino (liby są dostępne tutaj dla chcących dokonać takiej modyfikacji – wystarczy zwykły programator np. USBasp, aplikacja Arduino GUI) chciałbym aby mikroprocesor sam zmierzył napięcie jakie jest mu dostarczane – dotyczy to w większości projektów z zasilaniem bateryjnym, solarnym i każdym innym budzącym wątpliwości (bądź nie?). W pierwszej kolejności polecam bezwzględnie ujarzmić atmegę i jej napięcia – ja to zrobić dowiemy się tutaj, szczególnie zalecam zastosować się do wersji 2 tzw. “Podłączanie zalecane”.  Po co nam pomiar napięcia? a no po że gdy zachcemy np wykorzystać przetwornik analogowo-cyfrowy do mierzenia np. przepływu prądu to niezbędnym będzie nam mieć właściwe napięcie odniesienia, które domyślnie wynosi 5.0v. A więc, gdy dostarczamy prądu np. 5.1v i przetwarzamy to przez 5.0 – to otrzymamy błędne wyniki. Takie coś przyda nam się gdy zechcemy zasilać atmegę solarnie z zapasem akumulatorów z opcją rejestrowania przepływu prądu i stanu napięć (więcej o tym w przyszłych artykułach).  Poniższy kod służy jako gotowiec, wystarczy go wkleić, wgrać, a do pinu PA1 podłączyć + z szyny zasilającej samą atmegę. Strojenie: polecam spojrzeć na parametr 1238816L –  w idealnych warunkach powinien wynosić 123500L, niestety, z winy low-endu, komponentów lub innych niepożądanych czynników należy dobrać go tak by wskazywał poprawne wartości (w porównaniu z jakimś niezależnym miernikiem).

//pin napięcia - PA1 (ADC1), drugi pin od góry z prawej
void setup(void)
{
	Serial.begin(4800);
	delay(2000);
}

void loop(void)
{
	Serial.print("Input Voltage =  ");
	float AvrVcc = readVcc();
	Serial.println(AvrVcc);  //mV
}

long readVcc() {
	ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
	delay(10);
	ADCSRA |= _BV(ADSC);
	while (bit_is_set(ADCSRA,ADSC));
	uint8_t low  = ADCL;
	uint8_t high = ADCH;
	long result = (long)(high<<8) | low;
	result = 1238816L / result; // Calculate Vcc (in mV); 1125300~ = 1.1*1023*1000
	return result;
}

Hobbiton 2010/11 – Zdjęcia

Kolejna dawka materiałów z planu filmowego w Hobbitonie, Shire. Część zdjęć ukazuje nam już gotowe domy specjalnie na potrzeby  “Hobbita”.  Niestety ciężko doszukać się zdjęć z bezpośredniego nagrywania – wszędzie znaki, zakazy, nakazy i surowe kary – dlatego też rośnie działalność szpiegowska  ;)

Zwiedzanie hobbitonu

Kilka ciekawych opowieściu podróżnych, przebywajacych w okolicy Hobbitonu.

Dojeżdżamy do Matamata, okolic w których Peter Jackson odtworzył część Shire na potrzeby „Władcy Pierścieni”. Trzeba przyznać, że miejsce idealnie pasuje do książkowego opisu. Chcemy koniecznie obejrzeć hobbicie domy wydrążone w pagórkach. Niestety, gdy dojeżdżamy na miejsce okazuje się, że przemyślny właściciel okolicznych pagórków, chcąc zarobić na fanach, wpuszcza tylko turystów, którzy wykupili pakiety wycieczkowe (oczywiście bezzasadnie drogie) obejmujące m.in. nudny spektakl strzyżenia owiec, który w ogóle nas nie interesuje. Odpuszczamy więc, szczególnie że na bramie zamykającej drogę prowadząca w głąb Hobbitonu napisano, iż „the property you are about to enter is a working film production location” i dostęp do większości miejsc jest ograniczony. Ekipa Guillerma del Toro rozpoczęła tam prace nad scenografią do „Hobbita”, w związku z czym za zrobienie i publiczne udostępnienie fotografii z planu grozi proces i przepadek zdjęć. Nie zobaczyliśmy więc domów bosonogich hobbitów.
źródło : http://www.expeditionmoustache.pl/?p=1340

Hobbiton na mapie


Pierwsze miejsce to miasteczko Matamata (na Wyspie Północnej), gdzie niedaleko kręcono Hobbiton i gdzie nadal są zachowane części planu filmowego. Można je zwiedzać z wycieczką połączoną również ze zwiedzaniem farmy na której zbudowano wtedy plan filmowy i obserwowaniem procedury strzyżenia owiec. Wycieczki nie odbyłem również z przyczyn czasowych, bo byliśmy tylko przejazdem.
źródło : http://blog.kotelko.com/2009/12/sladami-froda-przez-kraj-na-koncu.html 


Wejscie na farme (niczego nie widac z drogi) kosztuje 52$ ze znizka YHA (normalnie 58$). Osobiscie nie naleze do wielkich fanow Tolkiena, ale uwazam, ze warto tam wejsc. Nigdy nie bylam w miejscu, gdzie krecono jakis film z przewodnikiem i byc moze dlatego zrobilo to na mnie wrazenie. Oczywiscie po powrocie musimy obejrzec film :-)
Po wiosce spaceruje sie dosc dlugo, mozna wchodzic do niektorych hobbickich chatek (m.in. Bag End), robic zdjecia i omijac owce. Przewodnik dostarcza wielu ciekawych opowiesci zza kulis produkcji. Na koniec jest pokaz strzyzenia owiec, 2 osoby moga tez nakarmic male butla.
źródło : http://kaktuusik.geoblog.pl/wpis/21539/hobbiton

MRTG, wykresy, statystyki

MRTG + DDWRT via SNMP/i nie tylko. Mało jest konkretnych rozwiązan odnośnie konfiguracji wykresów MRTG dla typowego routera/openwrt lub samego SNMP. Dlatego wrzucam kilka własnych rozwiązań opartych o skrypty nabazgrane w bashu. Część skryptów korzysta z SNMP który musi być włączony,a druga część – z skryptów generujących dwie linijki (aktualne zużycie/max). Cała paczka mrtg jest dostępna z polecenia opt-ipkg install mrtg (Czasem bedzie potrzebny pakiet mini-snmpd z powodu braku ./snmpget – należy z pakietem uważać, moze naruszyc konfiguracje juz działającego procesu. Wtedy wchodzimy w Serices/Services, dajemy APPLY,SAVE – powinno pomóc przywrócic działanie), a cały proces budowania w czasie wrzucamy do crona, np.:

root /opt/bin/mrtg /opt/etc/mrtg/config.cfg && /opt/bin/indexmaker /opt/etc/mrtg/config.cfg --output /opt/share/www/mrtg/index.html

Full MRG

UPTIME

Target[server-uptime]: `/opt/etc/mrtg/uptime.pl`
Colours[server-uptime]: LIGHT BLUE#7AAFFF,BLUE#1000FF,DARK GREEN#006000,VIOLET#FF00FF
Options[server-uptime]: gauge,noinfo, nopercent, growright, unknaszero
MaxBytes[server-uptime]: 200
Title[server-uptime]: server uptime
YLegend[server-uptime]: Hours
ShortLegend[server-uptime]: Hours
Legend1[server-uptime]: Uptime
Legend2[server-uptime]:
LegendI[server-uptime]:
LegendO[server-uptime]: uptime :
PageTop[server-uptime]:
#!/opt/bin/bash
DAY=`snmpget -v 1 -c public localhost HOST-RESOURCES-MIB::hrSystemUptime.0 | awk '{print $5}'`

shopt -s extglob
if [[ "$DAY" = +([0-9]) ]]; then
 		HOUR=`snmpget -v 1 -c public localhost HOST-RESOURCES-MIB::hrSystemUptime.0 | awk '{print $7}' | cut -f1 -d ":"`
    else
		DAY=0;
 		HOUR=`snmpget -v 1 -c public localhost HOST-RESOURCES-MIB::hrSystemUptime.0 | awk '{print $5}' | cut -f1 -d ":"`
fi

TOTALHOURS=$(($DAY * 24 + $HOUR))
echo $TOTALHOURS
echo $TOTALHOURS

PING GOOGLE

Options[google_ping]: nobanner,gauge,noinfo,nopercent,growright 
Target[google_ping]: `/opt/etc/mrtg/google.ping.pl` 
MaxBytes[google_ping]: 200 
YLegend[google_ping]: RTT (ms) 
Unscaled[google_ping]: ymwd 
LegendI[google_ping]: Ping 
LegendO[google_ping]: Suppress[google_ping]: y
#!/opt/bin/bash
PING="/opt/bin/ping"
ADDR="google.pl"
DATA=`$PING -c 4 $ADDR`
LOSS=`echo $DATA | /opt/bin/grep 'loss' | awk '{print $18}' | cut -f1 -d"%"`
LATENCY=`echo $DATA | /opt/bin/grep 'round-trip' | awk -F/ '{print $5}' | cut -f1 -d"."`
if [ "$LOSS" = "100" ] ; then
  echo 0
else
  echo "$LATENCY"
fi
echo 0

SWAP

Target[swap]: `/opt/etc/mrtg/swaper`
MaxBytes[swap]: 50000
Title[swap]:Memory State of Server
ShortLegend[swap]:  
kmg[swap]:kB,MB
YLegend[swap]: Swap Usage
Legend1[swap]: Total Swap
Legend2[swap]: Used Swap
LegendI[swap]: Total Swap
LegendO[swap]: Used Swap
Options[swap]: growright,gauge,nopercent
PageTop[swap]:
#!/bin/sh
MAX=`cat /proc/meminfo | /opt/bin/grep "SwapTotal" | /bin/sed 's/ //g' | /opt/bin/cut -d ':' -f2 | /opt/bin/cut -d 'k' -f1`
USED=`free|/opt/bin/grep Swap:|/opt/bin/awk '{print $3}'`
let MAXKB="$MAX"
echo "$MAXKB"
let USEKB="$USED"
echo "$USEKB"

Ilość procesów / Processes

# ILOSC PROCESOW
Target[procesy]: `/opt/etc/mrtg/iloscprocesow`
Options[procesy]: growright, gauge, nopercent, integer
MaxBytes[procesy]: 30000
#kilo[procesy]: 1
Title[procesy]: Procesy
PageTop[procesy]: <center> <H1>Procesy</H1>
ShortLegend[procesy]: &nbsp;
YLegend[procesy]: Procesy
Legend1[procesy]: Ilosc wszystkich procesow w systemie
Legend2[procesy]: Ilosc działających procesów
LegendI[procesy]: procesy:
LegendO[procesy]: aktywne procesy:
#!/opt/bin/bash
ILOSC=`ps | wc -l`
echo $ILOSC
echo $ILOSC

TCP/IP connections

Target[tcpopen]: `wc -l /proc/net/ip_conntrack | awk '{print $1"\n"$1}'`
Options[tcpopen]: nopercent,growright,gauge,noinfo
Title[tcpopen]: Open TCP connections
PageTop[tcpopen]: <H1>Aktywne polaczenia TCP</H1>
MaxBytes[tcpopen]: 10000
YLegend[tcpopen]: # conns
ShortLegend[tcpopen]: Polaczen
LegendI[tcpopen]: Polaczen:
LegendO[tcpopen]:
Legend1[tcpopen]: Open TCP connections

HDD/Pendrive usage

#pendrive
Target[pendrive]: `df | grep "/opt" | awk '{print $1"\n"$2}'`
MaxBytes[pendrive]: 520000
Title[pendrive]:Wykorzystanie Pendrive
ShortLegend[pendrive]: &nbsp;
kmg[pendrive]:kB,MB
kilo[procesy]: 1000
YLegend[pendrive]: Usage
Legend1[pendrive]: Total
Legend2[pendrive]: Used
LegendI[pendrive]: Total
LegendO[pendrive]: Used
Options[pendrive]: growright,gauge,nopercent
PageTop[pendrive]:<H1>Pendrive</H1>

RAM

# RAM
Target[ram]: `free | grep Mem | awk '{print $2"\n"$3}'`
MaxBytes[ram]: 50000
Title[ram]:RAM
ShortLegend[ram]: &nbsp;
kmg[ram]:kB,MB
YLegend[ram]: RAM Usage
Legend1[ram]: Total RAM
Legend2[ram]: Used RAM
LegendI[ram]: Total RAM
LegendO[ram]: Used RAM
Options[ram]: growright,gauge,nopercent
PageTop[ram]:<H1>RAM</H1>

Rozwiązania nie są idealne, sporo skryptów korzysta z awk, grep, cut – co dla typowego routera na mipsi’e z 300Mhz i 32Mb daje popalić i zjada sporo zasobów.

DD-WRT & Lighttpd+PHP+SQLite

Stworzenie prostego i lekkiego serwera www  na routerze  nie jest trudne, wszystko dzięki userowi DHC_DarkShadow, jeden klik i mamy profesjonalny router z całym niepotrzebnym sutffem . Wystarczy posiadać soft w swoim routerze oparty o OpenWRT, DDWRT, Tomato lub inny z dostępem do shella + pendrive/hdd/cokolwiek.

  1. Instalacja Optware, turbo-lazy (te dwie linijki zaoszczędzają kilka godzin pracy; świat jest piękny)
    wget -O /tmp/prep_optware http://wd.mirmana.com/prep_optware sh
    /tmp/prep_optware
  2. Serwer lighttpd bedzie domyślnie skonfigurowany i gotowy (php, praca na porcie  8080, sprawdzić lighttpd.cfg), pobieramy pliki, do php.ini dopisujemyPobierz : pdo.so-_pdo_sqlite.so-sqlite.so-mips
  3. extension=pdo.so
    extension=sqlite.so
    extension=pdo_sqlite.so
  4. Odpalamy zasobożerny proces i cieszymy się ledwo oddychającym serwerem www, example : http://musznik.ath.cx
    lighttpd -f /opt/etc/lighttpd/lighttpd.conf

i tyle, have fun ;]

Filesonic, Hotfile upload via FTP

Siedząc, naszła mnie chęć powrzucania trochę staffu i próby zgarnięcia grosza za wrzuty do FlieSonica którego porzuciłem za niskie zarobki, pół roku później okaząło się że zostało troche grosza… 14$ sukces, wracając do problemu.

Upload na  Filesonic/Hotfile/Wupload via FTP/lftp/linux – wszystkie pliki z katalogu

wymagane : LFTP

lftp -u LOGIN,HASLO -e "mirror -R /katalog/z/plikami/ /" ftp.eu.filesonic.com

i wsio, lftp bedzie starał się (póki żyje) upchac rekursywnie wszystkie pliki z katalogu.

Najlepiej opatrzyć to w screen’a (stawianie: screen -S NAZWA, porzucanie: CTRL>A>D,
powrót: screen -R NAZWA) i zostawić na noc.

a.. wracając, często zdarza się błąd (domyślna konfiguracja lftp) :
mirror: Fatal error: Certificate verification: Not trusted: issuer is not a CA 1 error detected
rozwiązanie :  do pliku lftp.conf dodać set ssl:verify-certificate no