Jump to content

ytf

Members
  • Content Count

    143
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by ytf


  1. Для обновления браузера firefox и flash плагина я написал php скрипт, который состоит из директории 777 ( всем пользователям даны права на запись в эту директорию), файла nget.php и файла obnov.php, все файлы можно разместить на одном из локальных сайтов.

    Содержимое файла nget.php

    <?php
    define("KURL_LOGIROVANIE", false); // true - если нужно сохранять ответы на http запросы в текстовый файл, иначе - false
    define("FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV", __DIR__.'/777/curl_zaprosy.txt'); // путь к текстовому файлу, в который будут записываться URL адреса страниц, ошибки, результаты запросов 
    define("FILE_DLYA_ZAPISI_KUKIS", __DIR__.'/777/curl_kuki.txt'); // путь к текстовому файлу, в который будут записываться кукис
    define("KURL_PAUZA", 50); // на какое число микросекунд скрипт засыпает перед следующим http запросом
    
    $last_curl_url = array(); // последний открытый сетевой адрес
    
    // сетевой запрос
    /* Параметры массива add:
     * yupi - строка логин:пароль для http авторизации
     * xml - добавляет заголовок ajax запроса
     * json - согласие получить в ответ json
     * post - массив данных, отправляемых формой
     * multi - массив данных, отправляемых формой в виде multipart-formdata
     * move - ограничить число допустимых редиректов, по умолчанию 5
     * top - включать заголовок в ответ функции, по умолчанию да
     * save - сохранить ответ в файл с именем
     * proxy - прокси
     * ref - ссылка, с которой мы перешли
     * req - request запрос
     * nobody - получение только заголовков header
     */
    function nget($url="",$add=array()) {
        file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, $url."\n", 8);
        if (!function_exists("curl_init")) return fget($url,$add);
        if (!($curl = curl_init())) return NULL;
        curl_setopt($curl, CURLOPT_URL, $url);      
        curl_setopt($curl, CURLOPT_COOKIEJAR, FILE_DLYA_ZAPISI_KUKIS);
        curl_setopt($curl, CURLOPT_COOKIEFILE, FILE_DLYA_ZAPISI_KUKIS);
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0');
        if (isset($add['yupi']))
        curl_setopt($curl, CURLOPT_USERPWD, $add['yupi']);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);   
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
        $headers = array();   
        if (isset($add['xml'])) { // ajax запрос
            $headers[] = 'X-Requested-With: XMLHttpRequest';        
        };
        
        if (isset($add['nobody'])) { // header запрос
    		curl_setopt($curl, CURLOPT_NOBODY, 1);
    		$add['move'] = 0;
    		$add['top'] = 1;
        };
        if (isset($add['json'])) { // json запрос
            $headers[] = 'Accept: application/json';
        };
        if (isset($add['post'])) { // post запрос
            curl_setopt($curl,CURLOPT_POST, TRUE);
            curl_setopt($curl,CURLOPT_POSTFIELDS, http_build_query($add['post']));
        };
        if (isset($add['multi'])) { // post multi/part запрос
            curl_setopt($curl,CURLOPT_POST, TRUE);
            curl_setopt($curl,CURLOPT_POSTFIELDS, $add['multi']);
        };
        if (isset($add['req'])) { // request запрос
            curl_setopt($curl,CURLOPT_CUSTOMREQUEST, "POST");
            curl_setopt($curl,CURLOPT_POSTFIELDS, $add['req']);
            $headers[] = 'Content-Type: application/json';
        };
        if (!isset($add['move'])) $add['move'] = 5;
        if ($add['move']>0) { // разрешены редиректы
            $add['top'] = true; // включать header в ответ
        }
        if (!isset($add['top']) OR isset($add['save'])) $add['top']=false;
        curl_setopt($curl, CURLOPT_HEADER, $add['top']);
        if (isset($add['proxy']))
        curl_setopt($curl, CURLOPT_PROXY, $add['proxy']);
        if (isset($add['ref']))
        curl_setopt($curl, CURLOPT_REFERER, $add['ref']);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, (isset($add['save'])?false:true));
        if (isset($add['save'])) { // сохранить файл в
            if (FALSE===($out = fopen($add['save'],"w+"))) {
                file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV,"failed opening of file ".$add['save']."\n",8);
                exit;
            }
            curl_setopt($curl, CURLOPT_FILE, $out);
        }
        curl_setopt($curl, CURLOPT_FORBID_REUSE, false);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, isset($add['time'])?$add['time']:120); 
        curl_setopt($curl, CURLOPT_TIMEOUT, isset($add['time'])?$add['time']:120);
        $no_header_params = array('xml','json','post','move','top','save','yupi','ref','proxy','multi','req','time','nobody');
        if (!empty($add)) foreach ($add as $k=>$h) if (!in_array($k,$no_header_params)) $headers[] = $h;
        if (!empty($headers))
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
     
        global $last_curl_url;
        $last_curl_url[] = $url;
        while (1) {
            usleep(KURL_PAUZA);
            $data = curl_exec($curl); 
            if (KURL_LOGIROVANIE==true) file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, $data, 8);
            $curl_errno = curl_errno($curl);
            if ($curl_errno > 0 AND $curl_errno!=28) {
                file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV,'cURL Error ('.$curl_errno.'): '.curl_error($curl)." on curl ".var_export($last_curl_url,1)."\n",8);
                curl_close($curl);
                exit;
            }
            if ($add['move']<1) break;
            $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
            if ($code != 301 && $code != 302)
                break;
            $header_start = strpos($data, "\r\n")+2;
            $headers = substr($data, $header_start, strpos($data, "\r\n\r\n", $header_start)+2-$header_start);
            if (!preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $headers, $matches))
                break;
            $newurl = $matches[1];
            if (!strpos($newurl, "//")) {
    			$old_url_parts=explode("//",end($last_curl_url));
    			$old_url_http_part=$old_url_parts[0];
    			$old_url_host_part=explode("/",$old_url_parts[1]);
    			$newurl=$old_url_http_part.'//'.$old_url_host_part[0].$newurl;
    		}
            curl_setopt($curl, CURLOPT_URL, $newurl);
            file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, $newurl."\n", 8);
            $last_curl_url[] = $newurl;
            $add['move']--; // уменьшение числа разрешённых редиректов
        };
        curl_close($curl);
        if (!$add['top']) {
            $ah = strpos($data, "\r\n\r\n")+4;
            if ($ah<200 AND substr($data,0,21)=='HTTP/1.1 100 Continue')
                $ah = strpos($data, "\r\n\r\n", $ah)+4;
            $data = substr($data, $ah);
        }
        if (isset($add['save'])) {
            fclose($out);
            return 1;
        }
        return $data;    
    }
    /* аналог curl с помощью file_get_contents */
    function fget($url="",$add=array()) {
    	$arrContextOptions=array(
    	  "ssl"=>array(
    			"verify_peer"=>false,
    			"verify_peer_name"=>false,
    		),
    	  "http"=>array(
    		"user_agent"=>'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0'
    	  ) 
    	);
    
        $headers = array();   
        if (isset($add['xml'])) { // ajax запрос
            $headers[] = 'X-Requested-With: XMLHttpRequest';        
        };
        if (isset($add['json'])) { // json запрос
            $headers[] = 'Accept: application/json';
        };
        if (isset($add['post'])) { // post запрос
            $arrContextOptions['http']['method'] = "POST";
            $arrContextOptions['http']['content'] = http_build_query($add['post']);
        };
        if (isset($add['multi'])) { // post multi/part запрос
            $arrContextOptions['http']['method'] = "POST";
            $arrContextOptions['http']['content'] = $add['multi'];
        };
        if (isset($add['req'])) { // request запрос
            $arrContextOptions['http']['method'] = "POST";
            $arrContextOptions['http']['content'] = $add['req'];
            $headers[] = 'Content-Type: application/json';
        };
        if (!isset($add['move'])) $add['move'] = 5;
        if ($add['move']>0) { // разрешены редиректы
            $add['top'] = true; // включать header в ответ
        }
        if (!isset($add['top']) OR isset($add['save'])) $add['top']=false;
        if (isset($add['proxy']))
        $arrContextOptions['http']['proxy'] = $add['proxy'];
        if (isset($add['ref']))
        $headers[] = 'Referer: '.$add['ref'];
        if (isset($add['save'])) { // сохранить файл в
            if (FALSE===($out = fopen($add['save'],"w+"))) {
                file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV,"failed opening of file ".$add['save']."\n",8);
                exit;
            }
        }
        $arrContextOptions['http']['timeout'] = isset($add['time'])?$add['time']:10;
        $no_header_params = array('xml','json','post','move','top','save','yupi','ref','proxy','multi','req','time');
        if (!empty($add)) foreach ($add as $k=>$h) if (!in_array($k,$no_header_params)) $headers[] = $h;
        if (isset($add['yupi']))
        $headers[] = 'Authorization : Basic '.base64_encode($add['yupi']);
        if (!empty($headers))
        $arrContextOptions['http']['header'] = $headers;
     
        global $last_curl_url;
        $last_curl_url[] = $url;
        usleep(KURL_PAUZA);
        $data = file_get_contents($url, false, stream_context_create($arrContextOptions));
        if (KURL_LOGIROVANIE==true) file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, $data, 8);
        if (isset($add['save'])) {
            fclose($out);
            return 1;
        }
        return $data;    
    }
    // сетевой запрос, скачивающий файл с помощью консольной команды wget
    function wget($url="",$filename="") {
        if (function_exists('system')) {
    		usleep(KURL_PAUZA);
    		system('wget -O '.$filename.' '.$url,$retval);
    	}
        else return false;
        return ($retval===0);
    }
    // найти участок кода между двух строк
    function iska($nachalo, $konec, $string) {
        if (!preg_match('/'.preg_quote($nachalo,'/').'(.*)'.preg_quote($konec,'/').'/ismU',$string,$nashli))
            return '';
        return $nashli[1];
    }
    // удалить участок кода между двух строк
    function udal($nachalo, $konec, $string) {
        return preg_replace('/'.preg_quote($nachalo,'/').'.*'.preg_quote($konec,'/').'/ismU','',$string);
    }
    // очистка логов запросов
    function ochistka_logov_zaprosov() {
    	file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, "");    
    }
    // проверка, давно ли не было запросов
    function dolgo_ne_bylo_http_zaprosov($dolgo=50) {
    	$a = time();
    	$b = filemtime(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV);
    	if ( ($a-$b)>$dolgo ) return true; else return false;
    }

    Содержимое файла obnov.php

    <?php
    ignore_user_abort(true);
    ini_set("max_execution_time",3600);
    ini_set("memory_limit","1200M");
    require 'nget.php';
    $f=time();
    
    $wd=__DIR__.'/777/'; // директория для записи файлов
    
    $u = "https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=ru";
    var_dump($u);
    $h=nget($u, array('nobody'=>1));
    //echo $h;
    $n=iska('releases/','/',$h);
    var_dump($n);
    
    $o=1; // обновлять ли программу
    if (file_exists($wd.'firefox.version')) {
    	$pn=file_get_contents($wd.'firefox.version');
    	if ($pn==$n) $o=0; 
    }
    file_put_contents($wd.'firefox.version',$n);
    
    if ($o) {
    	if (preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $h, $matches)) {
            $newurl = $matches[1];    
            var_dump($newurl);
            unlink($wd.'firefox.tar.bz2');
    		nget($newurl, array('save'=>$wd.'firefox.tar.bz2'));
    		$output = shell_exec('tar -vxjf '.$wd.'firefox.tar.bz2 -C /opt');
    		file_put_contents($wd.'firefox.output.txt',$output);
    	}
    }
    echo 'firefox ok';
    echo "\n";
    
    $u = "https://get.adobe.com/ru/flashplayer/";
    var_dump($u);
    $h=nget($u, array());
    //echo $h;
    $n=trim(iska('Версия','<',$h));
    var_dump($n);
    
    $o=1; // обновлять ли программу
    if (file_exists($wd.'flash.version')) {
    	$pn=file_get_contents($wd.'flash.version');
    	if ($pn==$n) $o=0; 
    }
    file_put_contents($wd.'flash.version',$n);
    
    if ($o) {
    	$h1 = iska('case "3":','case "4":',$h);
    	var_dump($h1);
    	$h2 = iska('$("#buttonDownload").attr("href","','"',$h1);
    	var_dump($h2);
    	if ($h2!=='') {
            $h=nget("https://get.adobe.com/".$h2, array());
            $newurl = iska("location.href = '","'",$h);
            sleep(2);
    		unlink($wd.'flash.tar.gz');
    		var_dump($newurl);
    		nget($newurl, array('save'=>$wd.'flash.tar.gz'));
    		$output = shell_exec('tar -xzvf '.$wd.'flash.tar.gz -C /usr/lib/mozilla/plugins libflashplayer.so');
    		$output2 = shell_exec('tar -xzvf '.$wd.'flash.tar.gz -C / usr');
    		file_put_contents($wd.'flash.output.txt',$output."\n".$output2);
    	}
    }
    echo 'flash ok';
    echo "\n";

    Для обновления браузера firefox и flash плагина достаточно в терминале выполнить команду

    sudo php -q /директория_в_которой_находятся_файлы_сайта/obnov.php

    Если php не установлен, его можно установить с помощью команды

    sudo apt-get install php

    Поскольку скрипт устанавливает программу firefox в директорию opt, для запуска firefox нужно будет использовать команду

    /opt/firefox/firefox -P default

    Если раньше firefox вы запускали с помощью другой команды, то может потребоваться изменить команду запуска в меню автозагрузки и в меню запуска приложений.


  2. в crunchbangplusplus я просто добавил команду

    setxkbmap -layout "us,ru" -model "pc105" -option "grp:ctrl_shift_toggle,grp_led:scroll" &

    в автозагрузку и у меня происходит смена раскладки по нажатию ctrl+shift


  3. В 24.04.2019 в 21:36, BB-8 сказал:

    Наверное, как минимум boot еще обязателен?

    под словом boot я подразумевал раздел, в который записывается загрузчик, например загрузчиком может быть grub2, то есть установщик операционной системы спрашивает "какой раздел вы хотите сделать загрузочным?" и там есть возможность выбрать жесткий диск или его раздел

    иногда загрузчик не помещается в первые байты жесткого диска и нужно сначала создать раздел, например 1 гб, потом создать остальные разделы, потом удалить первый раздел

     


  4. не знаю, но скорее всего разбивка мало отличается от других линукс ос

    например, в дебиан достаточно двух разделов "/ - root" и "swap"

    если это вторая ос на компьютере, то после установки второй ос первая может не загрузиться, в зависимости от совместимости загрузчика, разделом boot может быть дисковый накопитель, например, /dev/sda


  5. 76. Установка firefox

    Программу можно скачать по ссылке https://download-installer.cdn.mozilla.net/pub/firefox/releases/66.0.2/linux-x86_64/ru/firefox-66.0.2.tar.bz2

    Распаковать архив можно в терминале с помощью команды

    sudo tar -vxjf /home/user/Audiobooks/firefox-66.0.2.tar.bz2 -C /opt

    Запустить можно в терминале с помощью команды

    /opt/firefox/firefox -P default

    77. установка flash

    скачиваем версию tar.gz на сайте https://get.adobe.com/ru/flashplayer/ в директорию /home/user/Audiobooks

    sudo tar -xzvf /home/user/Audiobooks/flash_player_npapi_linux.x86_64.tar.gz -C /usr/lib/mozilla/plugins libflashplayer.so
    sudo tar -xzvf /home/user/Audiobooks/flash_player_npapi_linux.x86_64.tar.gz -C / usr


  6. В моём случае установлена ОС линукс debian 9 "crunchbangplusplus"

    Откройте терминал и выполните команду

    sudo apt-get install apache2 php libapache2-mod-php mariadb-server mariadb-client mariadb-common phpmyadmin
    

    на этапе установки phpmyadmin выберите веб-сервер apache и можете отказаться от создания базы данных.

    Откройте файл /etc/apache2/sites-available/s1.local.conf

    sudo geany /etc/apache2/sites-available/s1.local.conf

    и напишите в нём

    <VirtualHost *:80>
    ServerAdmin admin@s1.local
    ServerName s1.local
    ServerAlias www.s1.local
    DocumentRoot /var/www/s1.local
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

    Откройте файл /etc/hosts

    sudo geany /etc/hosts

    добавьте в него строку

    127.0.0.1	s1.local

    Изменим пароль сервера баз данных

    sudo mysql_secure_installation

    В качестве текущего пароля ничего не вводим, просто нажимаем Enter, в качестве нового пароля, если доступа к сайту из вне не планируется, просто напишем "root"

    Подключимся к серверу баз данных

    sudo mysql -u root -p

    Вводим ранее указанный пароль "root"

    Вводим команды:

    CREATE DATABASE s1;
    CREATE USER 'user'@'localhost' IDENTIFIED BY 'root';
    GRANT ALL PRIVILEGES ON s1.* TO 'user'@'localhost';
    quit;

    Включим домен s1.local

    sudo a2ensite s1.local.conf
    sudo a2dissite 000-default.conf
    sudo systemctl reload apache2

    Настройка завершена. Мы создали сайт с адресом "s1.local", файлы которого расположены по адресу "/var/www/s1.local"


  7. 75. Можно добавить панель быстрого запуска некоторых программ

    sudo apt-get install plank

    После установки можно добавить программы firefox-esr, thunar и cbpp-exit в быстрый запуск.

    Иконки я решил заменить, они в приложении к сообщению.

    Для cbpp-exit нужно создать специальный файл

    sudo geany /usr/share/applications/cbpp-exit.desktop

    [Desktop Entry]
    Name=Выход (Выключение или перезагрузка компьютера)
    Exec=cbpp-exit
    Icon=/usr/share/icons/hicolor/48x48/apps/cbpp-exit.png
    Type=Application
    

     

    cbpp-exit.png

    files.png

    inet.png


  8. В 17.02.2019 в 23:17, keej1337 сказал:

    билайн, который запрещает раздавать интернет на любые устройства и просит доп плату

    я находил в интернете сообщения о том, что давать консультации о том, как уменьшить налогообложение фирмы, не законно

    возможно и в вашем случае такая консультация не является законной

    чтобы не раздавать интернет на компьютер есть варианты:

    1. пользоваться интернетом на смартфоне, подключив к нему клавиатуру, мышь, жк-тв или монитор по hdmi кабелю

    2. подключить проводной интернет к компьютеру

    3. подключить к компьютеру 4g модем и переставить симку

    4. поискать другого 4g оператора, или сообщить город

    5. собрать деньги на кикстартере и запустить нового 4g оператора без ограничений по расшариванию


  9. например, вы запускаете терминал и в терминале пишите

    geany ~/.fluxbox/startup

    если установлен другой текстовый редактор, то вместо geany может быть gedit или nano

    в открывшемся редакторе жмёте Ctrl+F и ищете строку exec fluxbox, либо без Ctrl+F просто глазами читаете и находите нужную строку

    перед найденной строкой вы добавляете команду запуска нужной программы и символ &

    например, "plank &"

    получится

    "plank &

    exec fluxbox"

    сохраняете файл, перезагружаете компьютер, должна запуститься добавленная программа

    если не запускается, то либо команду ввели не верно, либо требуются рут-права,

    во втором случае можно попробовать другой метод автозагрузки


  10. я ввёл в поиске https://duckduckgo.com/?q=fluxbox+autostart&amp;t=ffsb&amp;ia=web

    и нашёл страницу http://fluxbox-wiki.org/category/howtos/en/Editing_the_startup_file.html

    если инструкция не устарела, нужно открыть файл ~/.fluxbox/startup и добавить в него нужные программы


  11. 74. Русификация меню выхода

    sudo geany /usr/bin/cbpp-exit

    после строчки

    #!/usr/bin/env python

    добавьте

    # -*- coding: utf-8 -*-

    после строчки

    self.window = gtk.Window()

    замените строку на

    title = "Вы авторизованы под именем " + getpass.getuser() + ""

    после строчки

    self.window.set_border_width(5)

    замените строку на

    self.window.set_size_request(860, 80)

    после строчки

    #Cancel button

    замените строку на

    self.cancel = gtk.Button(stock = "_Закрыть меню")

    после строчки

    #Logout button

    замените строку на

    self.logout = gtk.Button("_Завершить сессию пользователя")

    после строчки

    #Suspend button

    замените строку на

    self.suspend = gtk.Button("_Сохранить состояние ПК и выключить")

    после строчки

    #Reboot button

    замените строку на

    self.reboot = gtk.Button("_Перезагрузить ПК")

    после строчки

    #Shutdown button

    замените строку на

    self.shutdown = gtk.Button("_Выключить ПК")

×
×
  • Create New...