<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>sanych.nnov.ru</title>
    <link>http://sanych.nnov.ru/</link>
    <description>sanych.nnov.ru</description>
    <language>ru-ru</language>
    <pubDate>Mon, 23 Apr 2012 04:00:00 GMT</pubDate>
 
    <lastBuildDate>Mon, 23 Apr 2012 08:08:32 GMT</lastBuildDate>
    <docs>http://beshenov.ru/rss2.html</docs>
    <generator>SANYCH.NNOV.RU v0.6.1alpha от 13 июня 2011 года</generator>
    <managingEditor>sanych@sanych.nnov.ru (SanSanych)</managingEditor>
    <webMaster>webmaster@sanych.nnov.ru ()</webMaster>
    <item>
      <title><![CDATA[Заготовка для поделок на pic16f676 + дисплей nokia 3310 + энкодер]]></title>
      <link>http://sanych.nnov.ru/content/Zagotovka_dlja_podelok_na_pic16f676_-_displej_nokia_3310_-_jenkoder</link>
      <description><![CDATA[<p><img src="/files/zagot676.GIF"></p><br>
<p><a href="/files/P1030902_cr.jpg" class="highslide" onclick="return hs.expand(this)"><img src="/files/thumbs/P1030902_cr.jpg"></a></p><br>
Вот такая заготовка для всяких поделок типа вольтметров, счетчиков, датчиков и т.д. и т.п.<br>
А вот пример кода для вольт-амперметра с программным шимом и опросом энкодера:<br>
<!-- pagebreak --><br>
<pre>@device = pic16F676, intrc_osc_noclkout, wdt_on, mclr_off, protect_off
    osccal = %11111100
    enc1    var porta.5
    enc2    var porta.4
    butt    var porta.3
    
    D_C      var portc.3
    rst      var portc.2            
    SDIN     var portc.4
    SCK      var portc.5
    
    shim    var porta.2
    voltm   con 0         'an0
    ampm    con 1         'an1
    
            define adc_bits 10 
            define adc_clock 3 
            define adc_sampleus 50 
            adval var word 
            trisa=%00111011
            trisc=0
            CMCON = 7 
            ANSEL = %00000011 ' an1, AN0
            adcon0=%10000000 ' правое выравнивание, опорное - питание
            LcdReg          var  byte        
            x               var  byte
            y               var  byte
            t               var  byte
            e               var  byte
            z               var  byte
            Offset          var  byte
            Char            var  byte
            a               var  byte
            tmpshim var byte
            shcount var byte
            portc = 0
            counter var word 
            encstate var byte
            new var byte
            ioca = %00111000
          wpua = %00110100      
          tmr0 = 255
          INTCON = %10101000
          OPTION_REG = %00000000
          counter = 0
          tmpshim = 0
          shcount = 255
          
                on interrupt goto encoder 

                   DATA  @0,$3E,$51,$49,$45,$3E,_       ';// 0
                            $00,$42,$7F,$40,$00,_       ';// 1
                            $42,$61,$51,$49,$46,_       ';// 2
                            $21,$41,$45,$4B,$31,_       ';// 3
                            $18,$14,$12,$7F,$10,_       ';// 4
                            $27,$45,$45,$45,$39,_       ';// 5
                            $3C,$4A,$49,$49,$30,_       ';// 6
                            $01,$71,$09,$05,$03,_       ';// 7
                            $36,$49,$49,$49,$36,_       ';// 8
                            $06,$49,$49,$29,$1E,_       ';// 9
                            $08,$08,$3E,$08,$08,_       ';// +
                            $08,$08,$08,$08,$08,_       ';// -
                            $00,$60,$60,$00,$00,_       ';// .
                            $3F,$40,$40,$40,$3F,_       ';// U
                            $7E,$11,$11,$11,$7E,_       ';// A
                            $00,$41,$7F,$41,$00,_       ';// I
                            $1F,$20,$40,$20,$1F         ';// V
                 
                RST = 1
                            
                LcdReg  =  %00100001          'LCD Extended Commands.
                call    PrintCtrlLcd
                LcdReg  =  228          'Set LCD Vop (Contrast).
                call    PrintCtrlLcd
                LcdReg  =  %00000111          'Set Temp coefficent.
                call    PrintCtrlLcd
                LcdReg  =  %00010011          'LCD bias mode 1:48.
                call    PrintCtrlLcd
                LcdReg  =  %00100000          'LCD Standard Commands, Horizontal addressing mode.
                call    PrintCtrlLcd
                LcdReg  =  %00001100
                call    PrintCtrlLcd
               
                call CursorHome                
                Call ClearLcd
                
Main:           y = 1
                x = 0
                Char = 13                    ' "U"
                call    PrintWChar     
                x = 24
                adcin voltm, adval
                adval = adval*3
                Char = (adval dig 3)    ' десятые
                call    PrintWChar     
                Char = (adval dig 2)    ' единицы
                call    PrintWChar     
                Char = 12               ' точка
                call    PrintWChar     
                Char = (adval dig 1)    ' десятые
                call    PrintWChar     
                Char = (adval dig 0)    ' сотые
                call    PrintWChar     
                x = 0
                y = 3
                Char = 15                    ' "I"
                call    PrintWChar     
                x = 24
                adcin ampm, adval
                adval = adval*3
                Char = (adval dig 3)    ' единицы
                call    PrintWChar     
                Char = 12               ' точка
                call    PrintWChar     
                Char = (adval dig 2)    ' десятые
                call    PrintWChar     
                Char = (adval dig 1)    ' сотые
                call    PrintWChar     
                Char = (adval dig 0)    ' тысячн
                call    PrintWChar     
                y = 5
                x = 0
                Char = (counter dig 4)    ' десятые
                call    PrintChar     
                Char = (counter dig 3)    ' десятые
                call    PrintChar     
                Char = (counter dig 2)    ' точка
                call    PrintChar     
                Char = (counter dig 1)    ' десятые
                call    PrintChar     
                Char = (counter dig 0)    ' сотые
                call    PrintChar
                'PAUSE 500
                Goto main
    disable
encoder:     if intcon.0 = 1 then
                intcon.0 = 0
               new = enc1 + enc2 * 2
                if encstate = 2 then
                    if new = 3 then counter = counter + 1
                    if new = 0 then counter = counter - 1
                endif         
                if encstate = 0 then
                    if new = 2 then counter = counter + 1
                    if new = 1 then counter = counter - 1
                endif         
                if encstate = 1 then
                    if new = 0 then counter = counter + 1
                    if new = 3 then counter = counter - 1
                endif         
                if encstate = 3 then
                    if new = 1 then counter = counter + 1
                    if new = 2 then counter = counter - 1
                endif
                encstate = new
                counter = counter & %0000001111111111
             endif
             if intcon.2 = 1 then
                intcon.2 = 0
                tmr0 = 255
                 shcount = shcount - 1
                if shcount = 0 then tmpshim = counter >> 2
                if tmpshim > 0 then
                 shim = 1
                 tmpshim = tmpshim - 1
                else
                 shim = 0
                endif
            endif         
    resume
    enable
  
               
                	
' Перевод курсора x=0..83 y=0..5	
CursorHome:     x = 0
                y = 0
SetCursor:      LcdReg  = %10000000 + x       ' cursor  X
                call    PrintCtrlLcd
                LcdReg  =  %01000000 + y        ' cursor  Y
                call    PrintCtrlLcd
                return

PrintChar:   offset = Char * 5 
                call SetCursor         
                for a = 1 to 5                
                    read offset, LcdReg
                    call  PrintDataLcd
                    offset = offset + 1
                next a
                x = x + 6
                return

' печать символа удвоенного размера
PrintWChar:   offset = Char * 5          
                for a = 1 to 5                
                    read offset, z
                    t = (z & 1)*3
                    t = t|((z & 2)*6)
                    t = t|((z & 4)*12)
                    t = t|((z & 8)*24)
                    call SetCursor
                    LcdReg = t
                    call  PrintDataLcd
                    LcdReg = t
                    call  PrintDataLcd
                    z = z >> 4
                    t = (z & 1)*3
                    t = t|((z & 2)*6)
                    t = t|((z & 4)*12)
                    t = t|((z & 8)*24)
                    y = y + 1
                    call SetCursor
                    LcdReg = t
                    call  PrintDataLcd
                    LcdReg = t
                    call  PrintDataLcd
                    offset = offset + 1
                    x = x + 2
                    y = y - 1                    
                next a
                x = x + 2
                return

' очистка китайца (708 нулевых байта)
ClearLcd: 
        D_C = 1
        LcdReg = 0
        for t = 0 to 235
            for a = 0 to 2
            call PrintDataLcd
            next a
        next t
        Return         

' отправка данных/команд на lcd
PrintCtrlLcd:   D_C = 0                             
PrintDataLcd:   for e = 1 to 8
                    SDIN = LcdReg.7              
                    LcdReg = LcdReg << 1
                    SCK = 1
                    SCK = 0
                next e               
                D_C = 1
                return
                
end 
</pre><br>
вольтметр висит на AN0, амперметр на AN1, вывод шима с RA2. частотой програмный шим не блещет, поэтому фильтр я на него вешал из 2 резисторов на 4.7к и 2 емкостей 10 мкФ...
]]></description>
      <pubDate>Mon, 23 Apr 2012 08:08:30 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/Zagotovka_dlja_podelok_na_pic16f676_-_displej_nokia_3310_-_jenkoder</guid>
    </item>

    <item>
      <title><![CDATA[Простой индикатор заряда батареи на PIC]]></title>
      <link>http://sanych.nnov.ru/content/Prostoj_indikator_zarjada_batarei_na_PIC</link>
      <description><![CDATA[В последнее время для устройств с батарейным питанием все чаще используются LiOn аккумуляторы. Вот и я надергал элементов 18650 из старых батарей от ноутбуков, собрал элементарную зарядку на lm317 (кстати тут на выходных моделировал в протеусе защиту для них во время зарядки - если доделаю выложу). Однако при всех преимуществах литья для долгой службы надо следить за напряжением во время разряда - должно на элементе оставаться не меньше 3 вольт, иначе можно их быстро выбросить...<br>
<!-- pagebreak --><br>
<img src="/files/bat_ind.png"><br>
В железе пока не опробовал, моделирование в протеусе не всегда соответствует железу увы...<br>
Вот <a href="/files/bat-ind.zip">архив</a> с моделью, hex-файлом и исходником.<br>
Поясню:<br>
При включении или резете загорается столбик из светодиодов соответствующий половине напряжения на входе ( у меня 2 банки последовательно). Зажигаем на время в секундах в ячейке 3 eeprom. В первых трех хранятся коэффициенты срабатывания светодиодов, соответствующие напряжениям 4, 3.5 и  3 вольта. Соответственно можно эти коэффициенты поменять под свои элементы и/или напряжение питания. adc настроен на 8 бит оцифровки, т.е. 255 = напряжению питания. После того как замер напряжения показан - pic уходит в цикл, 2.3 секунды "спит", потом меряет напругу, если оно стало меньше 3 вольт, начинает моргать красный светодиод. <br>
<strong>update:</strong><br>
Собрал в железе, для более простой разводки поменял местами некоторые пины, поправил исходник. Схему не рисовал - по исходнику понятно что куда подключается:<br>
<pre>'@device = pic12F675, intrc_osc_noclkout, wdt_on, mclr_on, protect_off
    led_full      var     GPIO.0
    led_half      var     GPIO.1            
    led_low     var     GPIO.2
    led_empty      var     GPIO.5
    trisio=%00010000 ' отключаем GPIO.4
    ANSEL = %00111000 ' внутренний RC генератор, AN3
    adcon0=%00001101 '  опорное - питание, An3, модуль АЦП включен
    
    CMCON = 7 
    define adc_bits 8 
    define adc_clock 3 
    define adc_sampleus 50 
    led_empty = 1
    led_low = 1
    led_half = 1
    led_full = 1
    adval var byte 
    full var byte
    half var byte
    lowb var byte
    show var byte
    
    data @0,204,178,153,3  ' значения для 4, 3.5, 3 вольт (full,half,low) (51 для 1 вольта)
    
    read 0,full
    read 1,half
    read 2,lowb
    read 3,show         ' сколько секунд показывать напряжение
    adcin 3, adval
    if adval < lowb then led_empty = 0
    if adval > lowb then led_low = 0
    if adval > half then led_half = 0
    if adval > full then led_full = 0
    pause 1000*show          ' показывает напряжение на батарее и ждем 3 секунды
    led_empty = 1
    led_low = 1
    led_half = 1
    led_full = 1
main:   nap 7               ' спим 2.3 секунды
        adcin 3, adval
        if adval > lowb then main
avaria: led_empty = 0
        nap 5
        led_empty = 1
        nap 5
        goto avaria
end 
</pre>
]]></description>
      <pubDate>Thu, 15 Mar 2012 19:11:22 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/Prostoj_indikator_zarjada_batarei_na_PIC</guid>
    </item>

    <item>
      <title><![CDATA[Термометр на китайском дисплее от nokia 3310 и pic12f675]]></title>
      <link>http://sanych.nnov.ru/content/Termometr_na_kitajskom_displee_ot_nokia_3310_i_pic12f675</link>
      <description><![CDATA[<p>Решил тут собрать термометр <a href="http://www.ivica-novakovic.from.hr/Nokia%20Lcd%20Termometar.htm">http://www.ivica-novakovic.from.hr/Nokia%20Lcd%20Termometar.htm</a> а заодно по разбираться с microchip pic. Ну конечно оригинального дисплея от nokia 3310 у меня нет, а с китайским из "Профи" (55 руб - очень демократично) на экране оказался мусор. Решил все переписать, заодно увеличил размер цифр на экране и доточил для работы с 2 датчиками. Единственный минус - не писал опрос шины 1wire, а сунул адреса датчиков в eeprom - адреса 0x60 и 0x70. Также в eeprom находится шрифт.</p>
<p>Ну вобщем по исходникам довольно просто разобраться. Даже осталась свободная память в пике - можно еще что-либо реализовать. Правда свободна только одна нога и та голый вход, без АЦП...</p>
<!-- pagebreak -->
В показаниях выносного датчика минус - т.к. я его воздухом из балона заморозил :)
<p><a href="/files/P1030895.JPG" class="highslide" onclick="return hs.expand(this)"><img src="/files/thumbs/P1030895.JPG"></a><a href="/files/P1030900.JPG" class="highslide" onclick="return hs.expand(this)"><img src="/files/thumbs/P1030900.JPG"></a></p>
Исходник:
<pre>'****************************************************************
'*  Name    : Nokia LCD Termometar                              *
'*  Author  : Sanych feet Novakovic Ivica                                   *
'*  Notice  : Copyright (c) 2004 [Elektronika Kifo]             *
'*          : All Rights Reserved                               *
'*  Date    : 6.03.2012                                         *
'*  Version : 2.0                                               *
'*  Notes   : Pic12F675 , Nokia3310 Lcd & DS18B20               *
'*  e-mail  : ivica.novakovic@vz.t-com.hr                       *
'*  url     : http://free-vz.t-com.hr/Ivica-Novakovic/          *
'****************************************************************
'@device = pic12F675, intrc_osc_noclkout, wdt_on, mclr_off, protect_off
            'Define	NO_CLRWDT 1
                                                  
            D_C      var     GPIO.0
            rst      var     GPIO.1            
            DQ       var     GPIO.2
            SDIN     var     GPIO.4
            SCK      var     GPIO.5
            
            temperature     Var	 Word			
            TempHigh        var  temperature.highbyte
            count_remain    Var  Byte			
            count_per_c     Var	 Byte			
            TempH           var  byte
            Stat    VAR BIT
            TempL           var  byte
            Bitovi          var  byte
            Predznak        var  Bitovi.0
            Minus           var  Byte
            LcdReg          var  byte        
            x               var  byte
            y               var  byte
            t               var  byte
            e               var  byte
            z               var  byte
            Offset          var  byte
            Char            var  byte
            a               var  byte
            addr            var  byte[8]        
'-------------------------------------------------------------------------------            
                CMCON = 7
                ANSEL=0				    'digital IO " samo za 12F675 "
                TrisIO = 0
                GPIO = 0
'-------------------------------------------------------------------------------            
                
                   DATA  @0,$3E,$51,$49,$45,$3E,_       ';// 0
                            $00,$42,$7F,$40,$00,_       ';// 1
                            $42,$61,$51,$49,$46,_       ';// 2
                            $21,$41,$45,$4B,$31,_       ';// 3
                            $18,$14,$12,$7F,$10,_       ';// 4
                            $27,$45,$45,$45,$39,_       ';// 5
                            $3C,$4A,$49,$49,$30,_       ';// 6
                            $01,$71,$09,$05,$03,_       ';// 7
                            $36,$49,$49,$49,$36,_       ';// 8
                            $06,$49,$49,$29,$1E,_       ';// 9
                            $08,$08,$3E,$08,$08,_       ';// +
                            $08,$08,$08,$08,$08,_       ';// -
                            $00,$60,$60,$00,$00         ';// .
                 data @$60,$28,$21,$DD,$01,$03,$00,$00,$46   ' адрес первого датчика
                 DATA @$70,$28,$18,$00,$02,$03,$00,$00,$07   ' адрес второго датчика
                 
                RST = 1
                            
                LcdReg  =  %00100001          'LCD Extended Commands.
                call    PrintCtrlLcd
                LcdReg  =  200          'Set LCD Vop (Contrast).
                call    PrintCtrlLcd
                LcdReg  =  %00000111          'Set Temp coefficent.
                call    PrintCtrlLcd
                LcdReg  =  %00010011          'LCD bias mode 1:48.
                call    PrintCtrlLcd
                LcdReg  =  %00100000          'LCD Standard Commands, Horizontal addressing mode.
                call    PrintCtrlLcd
                LcdReg  =  %00001100
                call    PrintCtrlLcd
               
                call CursorHome                
                Call ClearLcd
 
Main:                
                Offset = $60     ' первый датчик
                y = 1
                call read_ds18b20
                Offset = $70     ' второй датчик
                y = 4
                call read_ds18b20
                nap 7
                Goto main

' читаем из датчика
read_ds18b20:
                for e = 1 to 8
                    read Offset,addr[e]
                    Offset = Offset + 1
                Next e
                OWOut DQ, 1, [$55,addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7],addr[8],$44]
W1:             OWIN DQ, 4, [Stat]       ' Проверяем занятость датчика
                clearwdt
                IF Stat = 0 THEN W1
                OWOut DQ, 1, [$55,addr[1],addr[2],addr[3],addr[4],addr[5],addr[6],addr[7],addr[8],$BE]
                OWIn DQ, 2, [temperature.LOWBYTE, temperature.HIGHBYTE]
                Predznak = 0
                if  TempHigh.7 = 1 then  temperature  =  (~ temperature) + 1 : Predznak = 1 
                TempH = temperature >> 4
                Templ = temperature.lowbyte & $0f
                Temperature = templ * 625
                
                if TempH > 99 then             ' если больше 100 градусов вместо "+" "1"
                        Char = 1                
                else    
                        Char = 10                       ' + plus
                        if Predznak = 1 then Char = 11  ' - minus
                endif
                x = 12
                call    PrintChar
                Char = (temph dig 1)            ' десятки
                call    PrintChar
                Char = (temph dig 0)            ' единицы
                call    PrintChar
                Char = 12                       ' точка
                call    PrintChar
                Char = (temperature dig 3)      ' десятичная часть
                Call    PrintChar
                return                
                	
' Перевод курсора x=0..83 y=0..5	
CursorHome:     x = 0
                y = 0
SetCursor:      LcdReg  = %10000000 + x       ' cursor  X
                call    PrintCtrlLcd
                LcdReg  =  %01000000 + y        ' cursor  Y
                call    PrintCtrlLcd
                return

' печать символа удвоенного размера
PrintChar:   offset = Char * 5          
                z = 0
                for a = 1 to 5                
                    read offset, z
                    t = (z & 1)*3
                    t = t|((z & 2)*6)
                    t = t|((z & 4)*12)
                    t = t|((z & 8)*24)
                    call SetCursor
                    LcdReg = t
                    call  PrintDataLcd
                    LcdReg = t
                    call  PrintDataLcd
                    z = z >> 4
                    t = (z & 1)*3
                    t = t|((z & 2)*6)
                    t = t|((z & 4)*12)
                    t = t|((z & 8)*24)
                    y = y + 1
                    call SetCursor
                    LcdReg = t
                    call  PrintDataLcd
                    LcdReg = t
                    call  PrintDataLcd
                    offset = offset + 1
                    x = x + 2
                    y = y - 1                    
                next a
                x = x + 2
                return

' очистка китайца (708 нулевых байта)
ClearLcd: 
        D_C = 1
        LcdReg = 0
        for t = 0 to 235
            for a = 0 to 2
            call PrintDataLcd
            next a
        next t
        Return         

' отправка данных/команд на lcd
PrintCtrlLcd:   D_C = 0                             
PrintDataLcd:   for e = 1 to 8
                    SDIN = LcdReg.7              
                    LcdReg = LcdReg << 1
                    SCK = 1
                    SCK = 0
                next e               
                D_C = 1
                return
               
                
                end         
</pre>
]]></description>
      <pubDate>Mon, 05 Mar 2012 16:05:34 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/Termometr_na_kitajskom_displee_ot_nokia_3310_i_pic12f675</guid>
    </item>

    <item>
      <title><![CDATA[компиляция St-link под linux]]></title>
      <link>http://sanych.nnov.ru/content/kompiljacija_St-link_pod_linux</link>
      <description><![CDATA[Небольшой лог для компиляции st-link под линукс.<br>
<!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="normal">git clone https</span><span class="symbol">:</span><span class="normal">//github</span><span class="symbol">.</span><span class="normal">com/texane/stlink stlink</span><span class="symbol">.</span><span class="normal">git</span>
<span class="normal">aptitude install libusb-</span><span class="number">1.0</span><span class="normal">-</span><span class="number">0</span><span class="normal">-dev pkg-config gcс make</span>
<span class="normal">cd stlink</span><span class="symbol">.</span><span class="normal">git</span>
<span class="normal">make</span>
<span class="normal">cp </span><span class="number">49</span><span class="normal">-stlinkv</span><span class="number">1</span><span class="symbol">.</span><span class="normal">rules /etc/udev/rules</span><span class="symbol">.</span><span class="normal">d</span><span class="symbol">/</span><span class="normal"> </span><span class="comment"># Для stm32vl-discovery, для stm32l-discovery 49-stlinkv2.rules</span>
<span class="normal">service udev restart</span></tt></pre><br>
После подсоединения платы должен появиться /dev/sgN. В папке stlink.git/flash лежит после компиляции st-flash:<br>
<!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="symbol">.</span><span class="normal">/st-flash erase /dev/sg</span><span class="number">1</span><span class="normal"> </span><span class="comment"># для стирания флэшки на борде</span>
<span class="symbol">.</span><span class="normal">/st-flash write /dev/sg</span><span class="number">1</span><span class="normal"> keil_project</span><span class="symbol">.</span><span class="normal">bin </span><span class="number">0x08000000</span><span class="normal"> </span><span class="comment"># для прошивки откомпилированного проекта</span></tt></pre><br>
Есть еще возможность отладки через gdb - мне пока не нужная.
]]></description>
      <pubDate>Fri, 17 Feb 2012 17:11:51 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/kompiljacija_St-link_pod_linux</guid>
    </item>

    <item>
      <title><![CDATA[Время и программы в windows]]></title>
      <link>http://sanych.nnov.ru/content/Vremja_i_programmy_v_windows</link>
      <description><![CDATA[Может кому полезно будет. Второй раз натыкаюсь на ситуацию некорректной работы некоторых программ в windows. В первый раз падала программа DVR записи с камер наблюдения. Падала с невнятной ошибкой - дата была на несколько лет в прошлом. <br>
Сегодня у нас один товарищ полдня переставлял браузеры всех марок - не сохранялись куки ни в одном. Оказалось что он живет уже в июле вместо февраля :)
]]></description>
      <pubDate>Wed, 08 Feb 2012 12:29:28 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/Vremja_i_programmy_v_windows</guid>
    </item>

    <item>
      <title><![CDATA[Бутерброды]]></title>
      <link>http://sanych.nnov.ru/content/Buterbrody</link>
      <description><![CDATA[Буду складывать сюда рецепты бутеров, которые сам сочинил, а также неординарные. <br>
<ol><li> Армейский: Белый хлеб, масло, желток вареного яйца, соль. Употреблять утром с кофе или крепким чаем - хорошо бодрит.</li><li> Серый хлеб, несоленый зрелый сыр ("Король Артур"), красный болгарский перец, соль, черный молотый перец. Свежий аромат, черный перец подчеркивает вкус сыра. </li> <p><a href="/files/buter.jpg" class="highslide" onclick="return hs.expand(this)"><img src="/files/thumbs/buter.jpg"></a></p><li> Серый хлеб с поджаренными семенами подсолнечника, сгущенка. Сгущенка делает вкус такого хлеба очень ярким. </li></ol>
]]></description>
      <pubDate>Thu, 05 Jan 2012 17:09:46 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/Buterbrody</guid>
    </item>

    <item>
      <title><![CDATA[Настройки grub2 для флэшки]]></title>
      <link>http://sanych.nnov.ru/content/Nastrojki_grub2_dlja_fljeshki</link>
      <description><![CDATA[Здесь кусок конфига grub2 на флэшке, касающейся загрузки лайфсиди с убунтой и с <a href="http://www.antiwinlocker.ru/download.html">AntiWinLocker</a><br>
<pre>menuentry "Lubuntu my persistent mode" {
   loopback loop /lubuntu.iso
   linux (loop)/casper/vmlinuz boot=casper persistent iso-scan/filename=/lubuntu.iso locale=ru_RU.UTF-8 console-setup/layoutcode=ru noprompt splash --
   initrd (loop)/casper/initrd.gz
}

menuentry "AntiWinLocker" {
   ntldr /bootmgr
}
</pre><br>
опции: <br>
<em>loopback loop /lubuntu.iso</em> - монтирует образ в "виртуальный" привод<br>
<em>(loop)/casper/vmlinuz</em> - ядро<br>
<em>boot=casper</em> - режим "живого" диска<br>
<em>persistent</em> - в корне диска расположен файл casper-rw, подготовленный так:<br>
<!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="normal">dd </span><span class="keyword">if</span><span class="symbol">=</span><span class="normal">/dev/zero </span><span class="variable">of</span><span class="symbol">=</span><span class="normal">/media/Transcend/casper-rw </span><span class="variable">bs</span><span class="symbol">=</span><span class="normal">1M </span><span class="variable">count</span><span class="symbol">=</span><span class="number">256</span>
<span class="normal">mkfs</span><span class="symbol">.</span><span class="normal">ext3 /media/Transcend/casper-rw</span></tt></pre><br>
в нем сохраняются измененные файлы во время работы в livecd<br>
<em>iso-scan/filename=/lubuntu.iso</em> - где лежит образ<br>
<em>locale=ru_RU.UTF-8 console-setup/layoutcode=ru</em> - локаль, русский в консоли<br>
<em>ntldr /bootmgr</em> - опция для  загрузки AWL, сам образ распаковывается в корень флешки<br>

]]></description>
      <pubDate>Thu, 29 Sep 2011 19:09:13 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/Nastrojki_grub2_dlja_fljeshki</guid>
    </item>

    <item>
      <title><![CDATA[скрипт server-install]]></title>
      <link>http://sanych.nnov.ru/content/skript_server-install</link>
      <description><![CDATA[<!-- pagebreak --><!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="comment">#! /bin/bash</span>
<span class="comment"># create server</span>
<span class="variable">version</span><span class="symbol">=</span><span class="string">"v0.7.5"</span>
<span class="variable">dirt</span><span class="symbol">=</span><span class="normal">`dirname </span><span class="variable">$0</span><span class="normal">`</span>
<span class="comment"># colors</span>
<span class="variable">green</span><span class="symbol">=</span><span class="string">"</span><span class="specialchar">\0</span><span class="string">33[01;32m"</span>
<span class="variable">black</span><span class="symbol">=</span><span class="string">"</span><span class="specialchar">\0</span><span class="string">33[00m"</span>
<span class="variable">redy</span><span class="symbol">=</span><span class="string">"</span><span class="specialchar">\0</span><span class="string">33[01;31m"</span>

<span class="comment"># question вопрос (переменная знач_по_умолчанию)</span>
<span class="function">question()</span><span class="normal"> {</span>
<span class="normal">    echo -en </span><span class="string">"$1 [$3] "</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">read</span><span class="normal"> var</span>
<span class="normal">    </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> </span><span class="string">"t$var"</span><span class="normal"> </span><span class="symbol">=</span><span class="normal"> </span><span class="string">"t"</span><span class="normal"> </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">        </span><span class="keyword">eval</span><span class="normal"> </span><span class="variable">$2</span><span class="symbol">=</span><span class="variable">$3</span>
<span class="normal">    </span><span class="keyword">else</span>
<span class="normal">        </span><span class="keyword">eval</span><span class="normal"> </span><span class="variable">$2</span><span class="symbol">=</span><span class="variable">$var</span>
<span class="normal">    </span><span class="keyword">fi</span>
<span class="normal">}</span>

<span class="comment"># somethingh wrong (message)</span>
<span class="function">error()</span><span class="normal"> {</span>
<span class="normal">    echo -e </span><span class="string">"$1"</span>
<span class="normal">    clean</span>
<span class="normal">    </span><span class="keyword">exit</span><span class="normal"> </span><span class="number">1</span>
<span class="normal">}</span>

<span class="comment"># read parameters</span>
<span class="function">read_params()</span><span class="normal"> {</span>
<span class="normal">    </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> -f </span><span class="variable">$dirt</span><span class="normal">/server-install</span><span class="symbol">.</span><span class="normal">conf </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">        </span><span class="symbol">.</span><span class="normal"> </span><span class="variable">$dirt</span><span class="normal">/server-install</span><span class="symbol">.</span><span class="normal">conf</span>
<span class="normal">    </span><span class="keyword">else</span>
<span class="normal">        </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> -f /root/server-install</span><span class="symbol">.</span><span class="normal">conf </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">                </span><span class="symbol">.</span><span class="normal"> /root/server-install</span><span class="symbol">.</span><span class="normal">conf</span>
<span class="normal">        </span><span class="keyword">else</span>
<span class="normal">        error </span><span class="string">"${redy}Нет конфига!!!${black}"</span>
<span class="normal">        </span><span class="keyword">fi</span>
<span class="normal">    </span><span class="keyword">fi</span>
<span class="normal">    </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> -f /root/server-install</span><span class="symbol">.</span><span class="normal">conf </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">        </span><span class="symbol">.</span><span class="normal"> /root/server-install</span><span class="symbol">.</span><span class="normal">conf</span>
<span class="normal">    </span><span class="keyword">fi</span>
<span class="normal">}</span>

<span class="comment"># usage</span>
<span class="function">usage()</span><span class="normal"> {</span>
<span class="normal">echo -ne </span><span class="string">"Этот скрипт $version устанавливает серверную версию линукса на жесткий диск компьютера.</span>
<span class="string">${green}Первый интерфейс смотрит в интернет, второй в локалку.${black}</span>
<span class="string">На обоих интерфейсах ${green}статика${black}.</span>
<span class="string">Состав ПО: dnsmasq, squid, sarg, shorewall, apache2, netams, logwatch, postfix${black}</span>
<span class="string">конфиг смотрится сначала ${dirt}/server-install.conf затем /root/server-install.conf</span><span class="specialchar">\n</span>
<span class="string">Опции: `basename $0` [ install | grub | fstab | network | admin ]</span><span class="specialchar">\n\n</span><span class="string">"</span>
<span class="normal">}</span>

<span class="comment"># check limitations of disk</span>
<span class="function">limita()</span><span class="normal"> {</span>
<span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> </span><span class="string">"d$disk"</span><span class="normal"> </span><span class="symbol">=</span><span class="normal"> </span><span class="string">"d"</span><span class="normal"> </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    echo -e </span><span class="string">"${redy}НЕТ ДИСКА!!!${black}"</span>
<span class="normal">    </span><span class="keyword">exit</span><span class="normal"> </span><span class="number">1</span>

<span class="keyword">fi</span>
<span class="variable">size</span><span class="symbol">=</span><span class="normal">`fdisk -l /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="symbol">|</span><span class="normal">grep /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $5}'</span><span class="normal">`</span>
<span class="comment"># in Mb</span>
<span class="variable">size</span><span class="symbol">=</span><span class="variable">$[$size</span><span class="symbol">/</span><span class="number">1000</span><span class="symbol">/</span><span class="number">1000</span><span class="symbol">]</span>
<span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> </span><span class="variable">$size</span><span class="normal"> -lt </span><span class="variable">$mindiskspace</span><span class="normal"> </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    echo -e </span><span class="string">"${redy}Мало места на диске!!!${black}"</span>
<span class="normal">    </span><span class="keyword">exit</span><span class="normal"> </span><span class="number">1</span>
<span class="keyword">fi</span>
<span class="normal">}</span>

<span class="comment"># count swap &amp; home</span>
<span class="function">count_sizes()</span><span class="normal"> {</span>
<span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> </span><span class="variable">$size</span><span class="normal"> -lt </span><span class="variable">$disksizehome</span><span class="normal"> </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    </span><span class="variable">home</span><span class="symbol">=</span><span class="number">0</span>
<span class="normal">    </span><span class="variable">swap</span><span class="symbol">=</span><span class="variable">$[$size</span><span class="symbol">/</span><span class="number">10</span><span class="symbol">]</span>
<span class="normal">    </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> </span><span class="variable">$swap</span><span class="normal"> -lt </span><span class="variable">$minswap</span><span class="normal"> </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">        </span><span class="comment"># min swap</span>
<span class="normal">        </span><span class="variable">swap</span><span class="symbol">=</span><span class="variable">$minswap</span>
<span class="normal">    </span><span class="keyword">fi</span>
<span class="normal">    </span><span class="variable">root</span><span class="symbol">=</span><span class="variable">$[$size</span><span class="normal">-</span><span class="variable">$swap</span><span class="symbol">]</span>
<span class="keyword">else</span>
<span class="normal">    </span><span class="variable">swap</span><span class="symbol">=</span><span class="variable">$maxswap</span>
<span class="normal">    </span><span class="variable">root</span><span class="symbol">=</span><span class="variable">$maxroot</span>
<span class="normal">    </span><span class="variable">home</span><span class="symbol">=</span><span class="variable">$[$size</span><span class="normal">-</span><span class="variable">$root</span><span class="normal">-</span><span class="variable">$swap</span><span class="symbol">]</span>
<span class="keyword">fi</span>
<span class="normal">}</span>

<span class="comment"># remove partitions</span>
<span class="function">rm_parts()</span><span class="normal">{</span>
<span class="keyword">for</span><span class="normal"> i </span><span class="keyword">in</span><span class="normal"> `parted /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> print</span><span class="symbol">|</span><span class="normal">awk </span><span class="string">'{print $1}'</span><span class="symbol">|</span><span class="normal">egrep </span><span class="string">'[[:digit:]]'</span><span class="normal">` </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">do</span>
<span class="normal">    swapoff /dev</span><span class="symbol">/</span><span class="variable">${disk}$i</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal"> /dev/null </span><span class="number">2</span><span class="symbol">&gt;&amp;</span><span class="number">1</span>
<span class="normal">    sleep </span><span class="number">3</span>
<span class="normal">    umount -l -f /dev</span><span class="symbol">/</span><span class="variable">${disk}$i</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal"> /dev/null </span><span class="number">2</span><span class="symbol">&gt;&amp;</span><span class="number">1</span>
<span class="normal">    sleep </span><span class="number">3</span>
<span class="normal">    parted -s /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> rm </span><span class="variable">$i</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я почистить диск :(${black}"</span>
<span class="keyword">done</span>
<span class="normal">}</span>

<span class="function">mk_parts()</span><span class="normal"> {</span>
<span class="normal">echo -e </span><span class="string">"${green}Создаем разделы...${black}"</span>
<span class="normal">parted -s /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> mklabel msdos</span>
<span class="normal">parted -s /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> mkpart primary </span><span class="number">0.0</span><span class="normal"> </span><span class="variable">${root}</span><span class="symbol">.</span><span class="number">0</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я создать партицию 1 на диске :(${black}"</span>
<span class="normal">parted -s /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> </span><span class="keyword">set</span><span class="normal"> </span><span class="number">1</span><span class="normal"> boot on</span>
<span class="normal">parted -s /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> mkpartfs primary linux-swap </span><span class="variable">${root}</span><span class="symbol">.</span><span class="number">1</span><span class="normal"> </span><span class="variable">$[$root</span><span class="symbol">+</span><span class="variable">$swap</span><span class="symbol">].</span><span class="number">0</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я создать партицию 2 на диске :(${black}"</span>
<span class="normal">sleep </span><span class="number">3</span>
<span class="normal">mkfs</span><span class="symbol">.</span><span class="normal">ext3 /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="number">1</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal">/dev/null </span><span class="number">2</span><span class="symbol">&gt;&amp;</span><span class="number">1</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я отформатировать партицию 1 на диске :(${black}"</span>
<span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> </span><span class="variable">$home</span><span class="normal"> -gt </span><span class="number">0</span><span class="normal"> </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    parted -s /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> mkpart primary </span><span class="variable">$[$root</span><span class="symbol">+</span><span class="variable">$swap</span><span class="symbol">].</span><span class="number">1</span><span class="normal"> </span><span class="variable">$[$root</span><span class="symbol">+</span><span class="variable">$swap</span><span class="symbol">+</span><span class="variable">$home</span><span class="symbol">].</span><span class="number">0</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я создать партицию 3 на диске :(${black}"</span>
<span class="normal">    sleep </span><span class="number">3</span>
<span class="normal">    mkfs</span><span class="symbol">.</span><span class="normal">ext3 /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="number">3</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal">/dev/null </span><span class="number">2</span><span class="symbol">&gt;&amp;</span><span class="number">1</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я отформатировать партицию 3 на диске :(${black}"</span>
<span class="keyword">fi</span>
<span class="normal">parted -s /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> print</span>
<span class="normal">}</span>

<span class="comment"># unpack</span>
<span class="function">unpack_sys()</span><span class="normal"> {</span>
<span class="normal">echo -e </span><span class="string">"${green}Распаковываем систему на диск...${black}"</span>

<span class="normal">cd /mnt</span><span class="variable">$$</span>
<span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> -f </span><span class="variable">$dirt</span><span class="normal">/server</span><span class="symbol">.</span><span class="normal">tar</span><span class="symbol">.</span><span class="normal">gz </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    tar xfz </span><span class="variable">$dirt</span><span class="normal">/server</span><span class="symbol">.</span><span class="normal">tar</span><span class="symbol">.</span><span class="normal">gz </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я распаковать систему :(${black}"</span>
<span class="keyword">else</span>
<span class="normal">    error </span><span class="string">"${redy}Нет файла $dirt/server.tar.gz!!!${black}"</span>
<span class="keyword">fi</span>
<span class="normal">}</span>

<span class="comment"># unpack configs</span>
<span class="function">unpack_configs()</span><span class="normal"> {</span>
<span class="normal">cd /mnt</span><span class="variable">$$</span>
<span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> -f </span><span class="variable">$dirt</span><span class="normal">/server_configs</span><span class="symbol">.</span><span class="normal">tar</span><span class="symbol">.</span><span class="normal">gz </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    tar xfz </span><span class="variable">$dirt</span><span class="normal">/server_configs</span><span class="symbol">.</span><span class="normal">tar</span><span class="symbol">.</span><span class="normal">gz </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я распаковать конфиги :(${black}"</span>
<span class="keyword">else</span>
<span class="normal">    error </span><span class="string">"${redy}Нет файла $dirt/server_configs.tar.gz!!!${black}"</span>
<span class="keyword">fi</span>
<span class="normal">}</span>

<span class="comment"># mount home</span>
<span class="function">mount_home()</span><span class="normal"> {</span>
<span class="keyword">if</span><span class="normal"> egrep </span><span class="string">"${disk}3</span><span class="specialchar">\&gt;</span><span class="string">"</span><span class="normal"> /proc/partitions </span><span class="symbol">&gt;</span><span class="normal"> /dev/null </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    mount /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="number">3</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/home </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я смонтировать home :(${black}"</span>
<span class="normal">    mkdir /mnt</span><span class="variable">$$</span><span class="normal">/home/ftp</span>
<span class="normal">    mkdir /mnt</span><span class="variable">$$</span><span class="normal">/home/netams</span>
<span class="normal">    chown root</span><span class="symbol">:</span><span class="normal">nogroup /mnt</span><span class="variable">$$</span><span class="normal">/home/ftp</span>
<span class="keyword">fi</span>
<span class="normal">}</span>

<span class="comment"># mount root</span>
<span class="function">mount_root()</span><span class="normal"> {</span>
<span class="normal">mkdir /mnt</span><span class="variable">$$</span>
<span class="normal">mount /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="number">1</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я смонтировать root :(${black}"</span>
<span class="normal">}</span>

<span class="function">mount_dev()</span><span class="normal"> {</span>
<span class="normal">sleep </span><span class="number">1</span>
<span class="normal">mount --bind /dev</span><span class="symbol">/</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/dev</span>
<span class="normal">sleep </span><span class="number">1</span>
<span class="normal">chroot /mnt</span><span class="variable">$$</span><span class="normal"> mount -t proc none /proc</span>
<span class="normal">}</span>

<span class="comment"># fstab</span>
<span class="function">mk_fstab()</span><span class="normal"> {</span>
<span class="normal">cat </span><span class="symbol">&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/fstab </span><span class="symbol">&lt;&lt;</span><span class="normal">EOF1</span>
<span class="comment"># &lt;file system&gt; &lt;mount point&gt;   &lt;type&gt;  &lt;options&gt;       &lt;dump&gt;  &lt;pass&gt;</span>
<span class="normal">proc            /proc           proc    defaults        </span><span class="number">0</span><span class="normal">       </span><span class="number">0</span>
<span class="comment"># /dev/sda1</span>
<span class="normal">`blkid -sUUID /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="number">1</span><span class="symbol">|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="symbol">|</span><span class="normal">sed </span><span class="string">"s#</span><span class="specialchar">\"</span><span class="string">##g"</span><span class="normal">`     </span><span class="symbol">/</span><span class="normal">       ext3    defaults</span><span class="symbol">,</span><span class="normal">noatime</span><span class="symbol">,</span><span class="normal">nodiratime</span><span class="symbol">,</span><span class="variable">errors</span><span class="symbol">=</span><span class="normal">remount-ro   </span><span class="number">0</span><span class="normal">       </span><span class="number">0</span>
<span class="comment"># /dev/sda2</span>
<span class="normal">`blkid -sUUID /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="number">2</span><span class="symbol">|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="symbol">|</span><span class="normal">sed </span><span class="string">"s#</span><span class="specialchar">\"</span><span class="string">##g"</span><span class="normal">`     none    swap    defaults        </span><span class="number">0</span><span class="normal">       </span><span class="number">0</span>
<span class="comment">#/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto,exec 0       0</span>
<span class="comment"># /dev/sda3</span>
<span class="normal">EOF1</span>
<span class="keyword">if</span><span class="normal"> egrep </span><span class="string">"${disk}3</span><span class="specialchar">\&gt;</span><span class="string">"</span><span class="normal"> /proc/partitions </span><span class="symbol">&gt;</span><span class="normal"> /dev/null </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    </span><span class="variable">homeid</span><span class="symbol">=</span><span class="normal">`blkid -sUUID /dev</span><span class="symbol">/</span><span class="variable">${disk}</span><span class="number">3</span><span class="symbol">|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="symbol">|</span><span class="normal">sed </span><span class="string">"s#</span><span class="specialchar">\"</span><span class="string">##g"</span><span class="normal">`</span>
<span class="normal">    echo </span><span class="string">"$homeid       /home       ext3    defaults,noatime,nodiratime,errors=remount-ro   0       0"</span><span class="normal"> </span><span class="symbol">&gt;&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/fstab</span>
<span class="keyword">fi</span>

<span class="normal">}</span>

<span class="comment"># grub</span>
<span class="function">mk_grub()</span><span class="normal"> {</span>
<span class="normal">grub-install --recheck --no-floppy --root-directory</span><span class="symbol">=</span><span class="normal">/mnt</span><span class="variable">$$</span><span class="normal"> /dev</span><span class="symbol">/</span><span class="variable">$disk</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal">/dev/null </span><span class="number">2</span><span class="symbol">&gt;&amp;</span><span class="number">1</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я по поставить grub :(${black}"</span>
<span class="normal">chroot /mnt</span><span class="variable">$$</span><span class="normal"> update-grub -y </span><span class="symbol">&gt;</span><span class="normal">/dev/null </span><span class="number">2</span><span class="symbol">&gt;&amp;</span><span class="number">1</span><span class="normal"> </span><span class="symbol">||</span><span class="normal"> error </span><span class="string">"${redy}Не смогла я по поставить grub/menu.lst :(${black}"</span>
<span class="normal">sed -i </span><span class="string">"s|#color|color|"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/boot/grub/menu</span><span class="symbol">.</span><span class="normal">lst</span>
<span class="normal">sed -i </span><span class="string">"s|quiet splash|nosplash locale=ru_RU vga=0x303|g"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/boot/grub/menu</span><span class="symbol">.</span><span class="normal">lst</span>
<span class="normal">}</span>

<span class="comment"># network</span>
<span class="function">mk_netw()</span><span class="normal"> {</span>
<span class="normal">question </span><span class="string">"${green}Имя сервера?${black}"</span><span class="normal"> hostn </span><span class="variable">$def_name</span>
<span class="normal">echo </span><span class="variable">$hostn</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/hostname</span>
<span class="normal">echo </span><span class="string">"127.0.0.1 localhost"</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/hosts</span>
<span class="normal">echo </span><span class="string">"127.0.1.1 $hostn"</span><span class="normal"> </span><span class="symbol">&gt;&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/hosts</span>

<span class="normal">question </span><span class="string">"${green}Домен?${black}"</span><span class="normal"> domen </span><span class="variable">$hostn</span>
<span class="normal">echo </span><span class="variable">$domen</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/mailname</span>

<span class="normal">question </span><span class="string">"${green}Внешний интерфейс?${black}"</span><span class="normal"> net_iface </span><span class="variable">$def_net_iface</span>
<span class="normal">question </span><span class="string">"${green}Внутрений интерфейс?${black}"</span><span class="normal"> lan_iface </span><span class="variable">$def_lan_iface</span>

<span class="normal">question </span><span class="string">"${green}Внешний ip-адрес на $net_iface?${black}"</span><span class="normal"> ip_netm </span><span class="variable">$def_net</span>
<span class="variable">ip_gw</span><span class="symbol">=</span><span class="normal">`ipcalc </span><span class="variable">$ip_netm</span><span class="symbol">|</span><span class="normal">grep HostMin</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="normal">`</span>

<span class="normal">question </span><span class="string">"${green}Шлюз?${black}"</span><span class="normal"> ip_gw1 </span><span class="variable">$ip_gw</span>

<span class="normal">question </span><span class="string">"${green}Внутренний ip-адрес на $lan_iface?${black}"</span><span class="normal"> ip_locm </span><span class="variable">$def_lan</span>

<span class="variable">ip_net</span><span class="symbol">=</span><span class="normal">`ipcalc </span><span class="variable">$ip_netm</span><span class="symbol">|</span><span class="normal">grep Address</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="normal">`</span>
<span class="variable">net_mask</span><span class="symbol">=</span><span class="normal">`ipcalc </span><span class="variable">$ip_netm</span><span class="symbol">|</span><span class="normal">grep Netmask</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="normal">`</span>
<span class="variable">ip_loc</span><span class="symbol">=</span><span class="normal">`ipcalc </span><span class="variable">$ip_locm</span><span class="symbol">|</span><span class="normal">grep Address</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="normal">`</span>
<span class="variable">loc_mask</span><span class="symbol">=</span><span class="normal">`ipcalc </span><span class="variable">$ip_locm</span><span class="symbol">|</span><span class="normal">grep Netmask</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="normal">`</span>
<span class="variable">loc_net</span><span class="symbol">=</span><span class="normal">`ipcalc </span><span class="variable">$ip_locm</span><span class="symbol">|</span><span class="normal">grep Network</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="normal">`</span>

<span class="normal">cat </span><span class="symbol">&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/network/interfaces </span><span class="symbol">&lt;&lt;</span><span class="normal">EOF3</span>
<span class="normal">auto lo</span>
<span class="normal">iface lo inet loopback</span>

<span class="normal">auto </span><span class="variable">$net_iface</span>
<span class="normal">iface </span><span class="variable">$net_iface</span><span class="normal"> inet static</span>
<span class="normal">address </span><span class="variable">$ip_net</span>
<span class="normal">netmask </span><span class="variable">$net_mask</span>
<span class="normal">gateway </span><span class="variable">$ip_gw1</span>

<span class="normal">auto </span><span class="variable">$lan_iface</span>
<span class="normal">iface </span><span class="variable">$lan_iface</span><span class="normal"> inet static</span>
<span class="normal">address </span><span class="variable">$ip_loc</span>
<span class="normal">netmask </span><span class="variable">$loc_mask</span>
<span class="normal">EOF3</span>

<span class="normal">cat </span><span class="symbol">&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/dnsmasq</span><span class="symbol">.</span><span class="normal">conf </span><span class="symbol">&lt;&lt;</span><span class="normal">EOFDNMAQ</span>
<span class="variable">interface</span><span class="symbol">=</span><span class="variable">$lan_iface</span>
<span class="normal">expand-hosts</span>
<span class="variable">domain</span><span class="symbol">=</span><span class="variable">$domen</span>
<span class="normal">dhcp-range</span><span class="symbol">=</span><span class="normal">`ipcalc </span><span class="variable">$ip_locm</span><span class="symbol">|</span><span class="normal">grep Address</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="symbol">|</span><span class="normal">cut -f</span><span class="number">1</span><span class="normal">-</span><span class="number">3</span><span class="normal"> -d</span><span class="symbol">.</span><span class="normal">`</span><span class="symbol">.</span><span class="number">110</span><span class="symbol">,</span><span class="normal">`ipcalc </span><span class="variable">$ip_locm</span><span class="symbol">|</span><span class="normal">grep HostMax</span><span class="symbol">:|</span><span class="normal">awk </span><span class="string">'{print $2}'</span><span class="normal">`</span><span class="symbol">,</span><span class="variable">$loc_mask</span><span class="symbol">,</span><span class="normal">12h</span>

<span class="normal">dhcp-leasefile</span><span class="symbol">=</span><span class="normal">/var/lib/misc/dnsmasq</span><span class="symbol">.</span><span class="normal">leases</span>
<span class="normal">conf-file</span><span class="symbol">=</span><span class="normal">/etc/dnsmasq</span><span class="symbol">.</span><span class="normal">hosts</span>
<span class="normal">EOFDNMAQ</span>

<span class="normal">echo </span><span class="string">"nameserver 127.0.0.1"</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/resolv</span><span class="symbol">.</span><span class="normal">conf</span>
<span class="normal">question </span><span class="string">"${green}ip-адрес 1 DNS-servera?${black}"</span><span class="normal"> dns1 </span><span class="variable">$def_dns1</span>
<span class="normal">echo </span><span class="string">"nameserver $dns1"</span><span class="normal"> </span><span class="symbol">&gt;&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/resolv</span><span class="symbol">.</span><span class="normal">conf</span>
<span class="normal">question </span><span class="string">"${green}ip-адрес 2 DNS-servera?${black}"</span><span class="normal"> dns2 </span><span class="variable">$def_dns2</span>
<span class="normal">echo </span><span class="string">"nameserver $dns2"</span><span class="normal"> </span><span class="symbol">&gt;&gt;</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/resolv</span><span class="symbol">.</span><span class="normal">conf</span>
<span class="normal">}</span>

<span class="comment"># add admin</span>
<span class="function">mk_admin()</span><span class="normal"> {</span>
<span class="normal">question </span><span class="string">"${green}Имя администратора системы?${black}"</span><span class="normal"> user </span><span class="variable">$def_admin</span>
<span class="normal">chroot /mnt</span><span class="variable">$$</span><span class="normal"> useradd -g admin -m -k /etc/skel -s /bin/bash </span><span class="variable">$user</span>
<span class="keyword">printf</span><span class="normal"> </span><span class="string">"${green}Введите пароль администратора системы ${black}</span><span class="specialchar">\n</span><span class="string">"</span>
<span class="normal">chroot /mnt</span><span class="variable">$$</span><span class="normal"> passwd </span><span class="variable">$user</span>
<span class="normal">}</span>

<span class="function">ch_configs()</span><span class="normal"> {</span>
<span class="comment"># squid</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACEHOT#$ip_loc#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/squid/squid</span><span class="symbol">.</span><span class="normal">conf</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACENET#$loc_net#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/squid/squid</span><span class="symbol">.</span><span class="normal">conf</span>

<span class="comment"># netams</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACEHOST#$ip_loc#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/netams/netams</span><span class="symbol">.</span><span class="normal">cfg</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACELAN#$loc_net#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/netams/netams</span><span class="symbol">.</span><span class="normal">cfg</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACEIFACE#$lan_iface#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/netams/netams</span><span class="symbol">.</span><span class="normal">cfg</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACELNET#`echo $loc_net|cut -f1 -d/`#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/netams/netams</span><span class="symbol">.</span><span class="normal">cfg</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACEMASK#$loc_mask#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/netams/netams</span><span class="symbol">.</span><span class="normal">cfg</span>

<span class="comment">#shorewall</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACEHOST#$ip_loc#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/shorewall/rules</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACEIFACEINET#$net_iface#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/shorewall</span><span class="symbol">/*</span>
<span class="normal">sed -i </span><span class="string">"s#REPLACEIFACELAN#$lan_iface#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/shorewall</span><span class="symbol">/*</span>

<span class="comment">#screen</span>
<span class="normal">sed -i </span><span class="string">"s#SERVER#$hostn#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/skel</span><span class="symbol">/.</span><span class="normal">screenrc</span>

<span class="comment">#postfix</span>
<span class="normal">sed -i </span><span class="string">"s#DOMAIN#$domen#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/postfix/main</span><span class="symbol">.</span><span class="normal">cf</span>
<span class="normal">sed -i </span><span class="string">"s#LAN#$loc_net#"</span><span class="normal"> /mnt</span><span class="variable">$$</span><span class="normal">/etc/postfix/main</span><span class="symbol">.</span><span class="normal">cf</span>
<span class="normal">}</span>

<span class="comment">#umount &amp; clear</span>
<span class="function">clean()</span><span class="normal"> {</span>
<span class="normal">umount -l -f /mnt</span><span class="variable">$$</span><span class="normal">/dev </span><span class="number">2</span><span class="symbol">&gt;</span><span class="normal">/dev/null</span>
<span class="normal">sleep </span><span class="number">3</span>
<span class="normal">chroot /mnt</span><span class="variable">$$</span><span class="normal"> umount -l -f /proc </span><span class="number">2</span><span class="symbol">&gt;</span><span class="normal">/dev/null</span>
<span class="normal">sleep </span><span class="number">3</span>
<span class="normal">umount -l -f /mnt</span><span class="variable">$$</span>
<span class="normal">sleep </span><span class="number">3</span>
<span class="normal">rm -r /mnt</span><span class="variable">$$</span>
<span class="normal">}</span>

<span class="comment">################################################################################</span>
<span class="comment"># begin</span>

<span class="comment">################################################################################</span>
<span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> </span><span class="variable">$UID</span><span class="normal"> -ne </span><span class="number">0</span><span class="normal"> </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">    echo </span><span class="string">'run this script whith SUDO'</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">exit</span><span class="normal"> </span><span class="number">1</span>
<span class="keyword">fi</span>

<span class="keyword">case</span><span class="normal"> </span><span class="variable">$1</span><span class="normal"> </span><span class="keyword">in</span>
<span class="normal">    install</span><span class="symbol">)</span>
<span class="normal">        read_params</span>
<span class="normal">        sfdisk -s</span>
<span class="normal">        question </span><span class="string">"${green}На какой диск будем устанавливать?${black}"</span><span class="normal"> dsk </span><span class="variable">$def_disk</span>
<span class="normal">        </span><span class="variable">disk</span><span class="symbol">=</span><span class="normal">`cat /proc/partitions</span><span class="symbol">|</span><span class="normal">egrep </span><span class="string">"${dsk}</span><span class="specialchar">\&gt;</span><span class="string">"</span><span class="symbol">|</span><span class="normal">awk </span><span class="string">'{print $4}'</span><span class="normal">`</span>
<span class="normal">        limita</span>
<span class="normal">        question </span><span class="string">"${redy}Диск $disk будет отформатирован!!! Продолжить? (NO/yes)${black} "</span><span class="normal"> answ NO</span>
<span class="normal">        </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">[</span><span class="normal"> </span><span class="variable">$answ</span><span class="normal"> </span><span class="symbol">!=</span><span class="normal"> </span><span class="string">"yes"</span><span class="normal"> </span><span class="symbol">]</span><span class="normal"> </span><span class="symbol">;</span><span class="normal"> </span><span class="keyword">then</span>
<span class="normal">            echo </span><span class="string">"Выход"</span>
<span class="normal">            </span><span class="keyword">exit</span><span class="normal"> </span><span class="number">0</span>
<span class="normal">        </span><span class="keyword">fi</span>
<span class="normal">        count_sizes</span>
<span class="normal">        rm_parts</span>
<span class="normal">        mk_parts</span>
<span class="normal">        mount_root</span>
<span class="normal">        unpack_sys</span>
<span class="normal">        mount_home</span>
<span class="normal">        mount_dev</span>
<span class="normal">        mk_fstab</span>
<span class="normal">        mk_grub</span>
<span class="normal">        mk_netw</span>
<span class="normal">        mk_admin</span>
<span class="normal">        ch_configs</span>
<span class="normal">        clean</span>
<span class="normal">        </span><span class="symbol">;;</span>
<span class="normal">    grub</span><span class="symbol">)</span>
<span class="normal">        echo -e </span><span class="string">"${green}Обновляем grub...${black}"</span>
<span class="normal">        read_params</span>
<span class="normal">        question </span><span class="string">"${green}Какой диск?${black}"</span><span class="normal"> disk </span><span class="variable">$def_disk</span>
<span class="normal">        mount_root</span>
<span class="normal">        mount_dev</span>
<span class="normal">        mk_grub</span>
<span class="normal">        clean</span>
<span class="normal">        </span><span class="symbol">;;</span>
<span class="normal">    fstab</span><span class="symbol">)</span>
<span class="normal">        echo -e </span><span class="string">"${green}Обновляем /etc/fstab...${black}"</span>
<span class="normal">        read_params</span>
<span class="normal">        question </span><span class="string">"${green}Какой диск?${black}"</span><span class="normal"> disk </span><span class="variable">$def_disk</span>
<span class="normal">        mount_root</span>
<span class="normal">        mk_fstab</span>
<span class="normal">        clean</span>
<span class="normal">        </span><span class="symbol">;;</span>
<span class="normal">    network</span><span class="symbol">)</span>
<span class="normal">        echo -e </span><span class="string">"${green}Обновляем сетевые настройки...${black}"</span>
<span class="normal">        read_params</span>
<span class="normal">        question </span><span class="string">"${green}Какой диск?${black}"</span><span class="normal"> disk </span><span class="variable">$def_disk</span>
<span class="normal">        mount_root</span>
<span class="normal">        mk_netw</span>
<span class="normal">        unpack_configs</span>
<span class="normal">        ch_configs</span>
<span class="normal">        clean</span>

<span class="normal">        </span><span class="symbol">;;</span>
<span class="normal">    admin</span><span class="symbol">)</span>
<span class="normal">        echo -e </span><span class="string">"${green}Добавляем админа...${black}"</span>
<span class="normal">        read_params</span>
<span class="normal">        question </span><span class="string">"${green}Какой диск?${black}"</span><span class="normal"> disk </span><span class="variable">$def_disk</span>
<span class="normal">        mount_root</span>
<span class="normal">        mount_home</span>
<span class="normal">        mk_admin</span>
<span class="normal">        clean</span>
<span class="normal">        </span><span class="symbol">;;</span>
<span class="normal">    </span><span class="symbol">*)</span>
<span class="normal">        usage</span>
<span class="normal">        </span><span class="symbol">;;</span>
<span class="keyword">esac</span>
</tt></pre>
]]></description>
      <pubDate>Fri, 09 Sep 2011 06:02:19 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/skript_server-install</guid>
    </item>

    <item>
      <title><![CDATA[скрипты для копирования музыки на mp3 плеер]]></title>
      <link>http://sanych.nnov.ru/content/skripty_dlja_kopirovanija_muzyki_na_mp3_pleer</link>
      <description><![CDATA[Я не очень люблю слушать музыку альбомами песню за песней - утомляем быстро и надоедает. А тут приобрел плеер самый простой из-за вечной экономии - Digma Mp600, а он не умеет shuffle. Да и в машину FM-трансмиттер купил с той-же проблемой (правда надо сказать что там можно с пульта случайную композицию включать, но это же не безопасно на дороге - особенно если ездишь один). Вот и написал в свободные полчаса пару скриптов:<br>
<!-- pagebreak --><br>
Это для создания и обновления базы  с музыкой updatemuzbase.tcl:<br>
<!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="comment">#! /usr/bin/tclsh</span>
<span class="comment"># откуда по умолчанию берем музыку</span>
<span class="keyword">set</span><span class="normal"> from </span><span class="symbol">/</span><span class="normal">mnt</span><span class="symbol">/</span><span class="normal">dva</span><span class="symbol">/</span><span class="normal">music</span>
<span class="comment"># где у нас база музыки</span>
<span class="keyword">set</span><span class="normal"> dbase </span><span class="symbol">~/</span><span class="normal">muzic</span><span class="symbol">.</span><span class="normal">db</span>
<span class="comment"># вынужденная глобальная переменная для рекурсивного glob</span>
<span class="keyword">set</span><span class="normal"> </span><span class="symbol">::</span><span class="normal">dirs </span><span class="string">""</span>
<span class="comment">############# рекурсивный glob для создания списка директорий   ###############</span>
<span class="keyword">proc</span><span class="normal"> globdir </span><span class="cbracket">{{</span><span class="normal">name </span><span class="symbol">.</span><span class="cbracket">}}</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">    </span><span class="keyword">lappend</span><span class="normal"> </span><span class="symbol">::</span><span class="normal">dirs </span><span class="variable">$name</span>
<span class="normal">    </span><span class="keyword">foreach</span><span class="normal"> subdir </span><span class="symbol">[</span><span class="keyword">glob</span><span class="normal"> </span><span class="symbol">-</span><span class="normal">nocomplain </span><span class="symbol">-</span><span class="normal">directory </span><span class="variable">$name</span><span class="normal"> </span><span class="symbol">-</span><span class="normal">type d </span><span class="symbol">*]</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">       globdir </span><span class="variable">$subdir</span>
<span class="normal">    </span><span class="cbracket">}</span>
<span class="cbracket">}</span>
<span class="comment"># если есть аргументы, берем музыку оттуда</span>
<span class="keyword">if</span><span class="normal"> </span><span class="cbracket">{</span><span class="variable">$argc</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal"> </span><span class="number">0</span><span class="cbracket">}</span><span class="normal"> </span><span class="cbracket">{</span><span class="keyword">set</span><span class="normal"> from </span><span class="variable">$argv</span><span class="cbracket">}</span>
<span class="keyword">package</span><span class="normal"> require sqlite3</span>
<span class="normal">sqlite3 db </span><span class="variable">$dbase</span>
<span class="comment"># если таблица не существует, создаем id-номер, name-имя файла, use-копировался уже на флэшку или нет</span>
<span class="keyword">if</span><span class="normal"> </span><span class="symbol">![</span><span class="normal">db exists </span><span class="string">"select name from sqlite_master where type='table' and tbl_name='muz';"</span><span class="symbol">]</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">    db </span><span class="keyword">eval</span><span class="normal"> </span><span class="string">"CREATE TABLE muz (id integer primary key, name text, use integer);"</span>
<span class="cbracket">}</span>
<span class="comment"># мой костыль для подмонтирования NAS с музыкой</span>
<span class="keyword">exec</span><span class="normal"> sudo mount </span><span class="symbol">-</span><span class="normal">t cifs </span><span class="symbol">//</span><span class="number">192.168</span><span class="symbol">.</span><span class="number">0.2</span><span class="symbol">/</span><span class="keyword">public</span><span class="normal"> </span><span class="symbol">/</span><span class="normal">mnt </span><span class="symbol">-</span><span class="normal">o users</span><span class="symbol">,</span><span class="normal">iocharset</span><span class="symbol">=</span><span class="normal">utf8</span><span class="symbol">,</span><span class="normal">username</span><span class="symbol">=</span><span class="normal">guest</span><span class="symbol">,</span><span class="normal">password</span><span class="symbol">=</span>

<span class="keyword">puts</span><span class="normal"> </span><span class="string">"Стираем ссылки на несуществующие файлы......"</span>
<span class="normal">db </span><span class="keyword">eval</span><span class="normal"> </span><span class="string">"select * from muz;"</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">    </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">![</span><span class="keyword">file</span><span class="normal"> exists </span><span class="variable">$name</span><span class="symbol">]</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">        </span><span class="keyword">puts</span><span class="normal"> </span><span class="variable">$name</span>
<span class="normal">        db </span><span class="keyword">eval</span><span class="normal"> </span><span class="string">"delete from muz where id='$id';"</span>
<span class="normal">    </span><span class="cbracket">}</span>
<span class="cbracket">}</span>

<span class="keyword">puts</span><span class="normal"> </span><span class="string">"Заносим в базу новые файлы......."</span>
<span class="normal">globdir </span><span class="variable">$from</span>
<span class="keyword">foreach</span><span class="normal"> d $</span><span class="symbol">::</span><span class="normal">dirs </span><span class="cbracket">{</span>
<span class="normal">    </span><span class="keyword">foreach</span><span class="normal"> f </span><span class="symbol">[</span><span class="keyword">glob</span><span class="normal"> </span><span class="symbol">-</span><span class="normal">nocomplain </span><span class="symbol">-</span><span class="normal">directory </span><span class="variable">$d</span><span class="normal"> </span><span class="symbol">-</span><span class="normal">type f </span><span class="symbol">*.</span><span class="cbracket">{</span><span class="normal">mp</span><span class="symbol">,</span><span class="normal">MP</span><span class="symbol">,</span><span class="normal">Mp</span><span class="cbracket">}</span><span class="number">3</span><span class="symbol">]</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">        </span><span class="keyword">regsub</span><span class="normal"> </span><span class="symbol">-</span><span class="normal">all </span><span class="cbracket">{</span><span class="string">'} $f {''} f</span>
<span class="string">#'</span>
<span class="normal">        </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">![</span><span class="normal">db exists </span><span class="string">"select id from muz where name='$f';"</span><span class="symbol">]</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">            </span><span class="keyword">puts</span><span class="normal"> </span><span class="variable">$f</span>
<span class="normal">            db </span><span class="keyword">eval</span><span class="normal"> </span><span class="string">"insert into muz values (NULL, '$f' ,0);"</span>
<span class="normal">        </span><span class="cbracket">}</span>
<span class="normal">    </span><span class="cbracket">}</span>
<span class="cbracket">}</span>

<span class="comment"># отмонтируем NAS</span>
<span class="keyword">exec</span><span class="normal"> sudo umount </span><span class="symbol">/</span><span class="normal">mnt</span></tt></pre><br>
А это для копирования на флэшку в случайном порядке randommuz.tcl:<br>
<!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="comment">#! /usr/bin/tclsh</span>
<span class="comment"># база с музыкой</span>
<span class="keyword">set</span><span class="normal"> dbase </span><span class="symbol">~/</span><span class="normal">muzic</span><span class="symbol">.</span><span class="normal">db</span>
<span class="comment"># куда копируем по умолчанию </span>
<span class="keyword">set</span><span class="normal"> path </span><span class="symbol">/</span><span class="normal">media</span><span class="symbol">/</span><span class="normal">Transcend</span>
<span class="comment"># меняем путь при наличии аргументов</span>
<span class="keyword">if</span><span class="normal"> </span><span class="cbracket">{</span><span class="variable">$argc</span><span class="normal"> </span><span class="symbol">&gt;</span><span class="normal"> </span><span class="number">0</span><span class="cbracket">}</span><span class="normal"> </span><span class="cbracket">{</span><span class="keyword">set</span><span class="normal"> path </span><span class="variable">$argv</span><span class="cbracket">}</span>
<span class="keyword">puts</span><span class="normal"> </span><span class="variable">$path</span>

<span class="comment"># мой костыль для NAS</span>
<span class="keyword">exec</span><span class="normal"> sudo mount </span><span class="symbol">-</span><span class="normal">t cifs </span><span class="symbol">//</span><span class="number">192.168</span><span class="symbol">.</span><span class="number">0.2</span><span class="symbol">/</span><span class="keyword">public</span><span class="normal"> </span><span class="symbol">/</span><span class="normal">mnt </span><span class="symbol">-</span><span class="normal">o users</span><span class="symbol">,</span><span class="normal">iocharset</span><span class="symbol">=</span><span class="normal">utf8</span><span class="symbol">,</span><span class="normal">username</span><span class="symbol">=</span><span class="normal">guest</span><span class="symbol">,</span><span class="normal">password</span><span class="symbol">=</span>
<span class="keyword">package</span><span class="normal"> require sqlite3</span>
<span class="normal">sqlite3 db </span><span class="variable">$dbase</span>
<span class="comment"># начальный номер композиции, они берутся в случайном порядке для тупых китайских плейеров не умеющих shuffle</span>
<span class="keyword">set</span><span class="normal"> num </span><span class="number">1000</span>
<span class="comment"># для того чтоб выходило когда кончится место на флэшке</span>
<span class="keyword">catch</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">  </span><span class="keyword">while</span><span class="normal"> </span><span class="cbracket">{</span><span class="number">1</span><span class="cbracket">}</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">    db </span><span class="keyword">eval</span><span class="normal"> </span><span class="string">"select id,name from muz where use='0' order by random() limit 1;"</span><span class="normal"> </span><span class="cbracket">{</span>
<span class="normal">        </span><span class="keyword">file</span><span class="normal"> copy </span><span class="variable">$name</span><span class="normal"> $</span><span class="cbracket">{</span><span class="normal">path</span><span class="cbracket">}</span><span class="symbol">/</span><span class="normal">$</span><span class="cbracket">{</span><span class="normal">num</span><span class="cbracket">}</span><span class="symbol">.</span><span class="normal">mp3  </span>
<span class="normal">        </span><span class="keyword">puts</span><span class="normal"> </span><span class="string">"$num      $name"</span>
<span class="comment"># помечаем что копировали для того чтоб избегнуть повторов</span>
<span class="normal">        db </span><span class="keyword">eval</span><span class="normal"> </span><span class="string">"update muz set use='1' where id='$id';"</span>
<span class="normal">        </span><span class="keyword">incr</span><span class="normal"> num</span>
<span class="normal">    </span><span class="cbracket">}</span>
<span class="normal">  </span><span class="cbracket">}</span>
<span class="cbracket">}</span>
<span class="comment"># отмонтируем NAS</span>
<span class="keyword">exec</span><span class="normal"> sudo umount </span><span class="symbol">/</span><span class="normal">mnt</span></tt></pre>
]]></description>
      <pubDate>Wed, 17 Aug 2011 18:40:25 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/skripty_dlja_kopirovanija_muzyki_na_mp3_pleer</guid>
    </item>

    <item>
      <title><![CDATA[Таймауты чтения-записи с жесткого диска]]></title>
      <link>http://sanych.nnov.ru/content/Tajmauty_chtenija-zapisi_s_zhestkogo_diska</link>
      <description><![CDATA[From <a href="http://habrahabr.ru/blogs/hardware/92701">http://habrahabr.ru/blogs/hardware/92701</a><br>
Посмотреть, поддерживает ли жёсткий диск управление ошибками можно с помощью команды <!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="normal">smartctl -a /dev/sda</span></tt></pre> строчка SCT capabilities:<br>
<pre>SCT capabilities:  (0x303f) SCT Status supported.
			SCT Error Recovery Control supported.  *****
			SCT Feature Control supported.</pre><br>
<br>
Если строчки нет — диск их (команды) не поддерживает.<br>
<br>
Чтобы посмотреть таймауты используем команду smartctl -l scterc /dev/sda. Вывод выглядит так:<br>
<!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="comment"># smartctl -l scterc /dev/sda</span></tt></pre><pre>SCT Error Recovery Control:
           Read:     70 (7.0 seconds)
          Write:     70 (7.0 seconds)</pre><br>
Для установки, соответственно, указываем значения через запятую после scterc: <!-- Generator: GNU source-highlight 3.1.3
by Lorenzo Bettini
http://www.lorenzobettini.it
http://www.gnu.org/software/src-highlite -->
<pre><tt><span class="normal">smartctl -l scterc</span><span class="symbol">,</span><span class="number">120</span><span class="symbol">,</span><span class="number">60</span><span class="normal"> /dev/sde</span></tt></pre> (величина указывается в десятых долях секунды, то есть 120 соотвествует 12 секундам, первое число — чтение, второе — запись). 0 означает «до победного конца», то есть неограниченно долго.
]]></description>
      <pubDate>Thu, 11 Aug 2011 16:44:30 GMT</pubDate>
      <guid>http://sanych.nnov.ru/content/Tajmauty_chtenija-zapisi_s_zhestkogo_diska</guid>
    </item>


  </channel>
</rss>

