Сообщения nerve
Как уничтожить жесткий диск в датацентре?
По соображениям безопасности отработавшие свое или замененные на более новые диски из ДЦ выносить нельзя и их там уже скопилось количество, исчисляемое десятками.
Услуги уничтожения/шрединга ДЦ не предоставляет.
Орудовать дрелью/молотком тоже не вариант.
Нужен надежный и простой способ(-ы) или уничтожения инфы на дисках (3’5/2’5, spin/ssd) или уничтожения дисков в ограниченных условиях ДЦ.
UDP proxy for SNMP
ServerA - это Nagios сервер, которому нужно мониторить по SNMP устройства device1-3, слушающие на дефолтном 161 UDP порту.
Устройства device1-3 не доступны напрямую с ServerA, так как в общей сети существует аналогичная подсеть 10.10.10.0
Зато устройства device1-3 доступны напрямую с ServerB, при этом ServerB ничего не знает о существующей аналогичной подсети 10.10.10.0 так что здесь это не будет проблемой.
Сервера А и В доступны между собой.
Что можно сделать, чтоб ServerA мог по UDP подключаться к устройствам, используя ServerB? Разумеется на ServerA я могу указывать другой адрес и порты для устройств, например если прокси или тунель будет поднят на ServerB.
Смотрел в сторону SSF, но не понял как применить в моем случае.
Рабочее место IT-специалиста
Боль от предоставленного на работе ноута Ideapad L340 заключалась в том, что как оказалось, он не позволял подключить второй монитор, даже видео сигнал через тайп-си отсутствует.
Однако купленный переходник с чипом от displaylink на удивление завелся после непродолжительных плясок с бубном и можно почувствовать себя человеком.
Внешняя USB-to-HDMI видеокарта для Ubuntu 20
Существует довольно много сабжевых display-link-ов для ноутбуков не имеющих лишнего порта для монитора. Но все они Win/Mac only.
Ищется рабочее решение под линукс для ноутбука где нет дополнительного видео-выхода.
Посчитать количество будних дней в месяце
Есть отличный способ используя команду ncal:
https://linuxconfig.org/how-to-list-only-work-days-using-shell-command-line-on-linux
Передавая в качестве параметра номер месяца и год можно узнать число будних дней для любого месяца.
ncal -hM 9 2020 | grep -vE "^S|^ |^$" | sed "s/[[:alpha:]]//g" | fmt -w 1 | sort -n | wc -l
22
Это все прекрасно работает до попытки использования в рэдхэт или центос. Там ncal нет, а есть только cal и основное отличие в том, что ncal выводит дни строками, а cal - колонками. Соответственно в ncal строки с выходными можно легко срезать кучей способов:
ncal -hM 9 2020
September 2020
Mo 7 14 21 28
Tu 1 8 15 22 29
We 2 9 16 23 30
Th 3 10 17 24
Fr 4 11 18 25
Sa 5 12 19 26
Su 6 13 20 27
А в cal какого-то надежного способа придумать не получилось:
cal -m $(date +%m -d 'last month') 2020
September 2020
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
нужно для Centos8.
Google Chart: HTML to PNG in console
Есть скрипт который генерит html файлы в формате гугл чарта.
эти файлы отправляются на почту адресатам и чарты можно смотреть открыв html в браузере.
вопрос: каким образом можно исходные html превратить в статичные картинки на линуксе без ДЕ?
ни одна из консольных утилит, которые я пробовал, не смогла этого сделать. установка огнелиса и попытки сделать скриншот в консоли тоже не удались.
ZFS pool and Offline uncorrectable sectors
На почту стали приходит warnings:
Device: /dev/sdd [SAT], 3 Currently unreadable (pending) sectors
Device: /dev/sdd [SAT], 3 Offline uncorrectable sectors
три сектора не читаются и не помечены к данному времени как реаллокэйтед.
есть ли надежда, что они будут помечены в скором времени или как можно ускорить этот процесс?
как произвести замену диска в данном zfs pool-е (striped mirror aka raid10)?
# zpool status -v
pool: rpool
state: ONLINE
scan: scrub repaired 0B in 1h9m with 0 errors on Sun Apr 14 01:33:51 2019
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sda2 ONLINE 0 0 0
sdb2 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
# zpool iostat -v
capacity operations bandwidth
pool alloc free read write read write
---------- ----- ----- ----- ----- ----- -----
rpool 92.5G 329G 1 55 70.3K 1.87M
mirror 40.9G 148G 0 26 31.5K 883K
sda2 - - 0 13 15.7K 442K
sdb2 - - 0 13 15.8K 442K
mirror 51.6G 180G 0 28 38.7K 1.00M
sdc - - 0 14 19.3K 515K
sdd - - 0 14 19.4K 515K
---------- ----- ----- ----- ----- ----- -----
# smartctl -a /dev/sdd
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.15.18-7-pve] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda 7200.12
Device Model: ST3250318AS
Serial Number: 6VY2C4ZM
LU WWN Device Id: 5 000c50 01892aafb
Firmware Version: CC35
User Capacity: 250,058,268,160 bytes [250 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: 7200 rpm
Device is: In smartctl database [for details use: -P show]
ATA Version is: ATA8-ACS T13/1699-D revision 4
SATA Version is: SATA 2.6, 3.0 Gb/s
Local Time is: Tue Apr 30 10:11:06 2019 EEST
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 111 099 006 Pre-fail Always - 38892278
3 Spin_Up_Time 0x0003 097 097 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 096 096 020 Old_age Always - 4127
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 069 060 030 Pre-fail Always - 9038214
9 Power_On_Hours 0x0032 056 056 000 Old_age Always - 38841
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 099 099 020 Old_age Always - 1974
183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 100 100 000 Old_age Always - 0
188 Command_Timeout 0x0032 100 098 000 Old_age Always - 8590066156
189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0
190 Airflow_Temperature_Cel 0x0022 071 056 045 Old_age Always - 29 (Min/Max 21/31)
194 Temperature_Celsius 0x0022 029 044 000 Old_age Always - 29 (0 13 0 0 0)
195 Hardware_ECC_Recovered 0x001a 033 024 000 Old_age Always - 38892278
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 3
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 3
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 726
240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 43342 (80 198 0)
241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 2102495214
242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 3248288867
Запись в БД из скрипта. Что делать если сервер временно не доступен?
Скрипт запускается по крону, формирует массив, значения из которого заносятся в цикле в базу mysql на удаленном сервере:
echo "INSERT INTO table (value1,value2) VALUES ('${Array[$i]}', '$Date');" \
| mysql -uuser -ppas -h some.host database
Иногда связь с сервером пропадает:
ERROR 2003 (HY000): Can't connect to MySQL server on (110)
На ум приходят такие варианты:
1) пытаться записывать значения в цикле до тех пор пока они будут записаны, то есть исчезнет ошибка. Но тут есть проблема, что связи может не быть долго, а скрипт должен выполнится до конца.
2) если получаю ошибку mysql, то формировать временный файл с данными из массива, а при следующем запуске скрипта проверять наличие этого файла и пробовать занести в базу снова.
С какой скоростью растет дисковое пространсво сервиса youtube?
Просто стало интересно, какого оно объема сейчас, сколько инфы в среднем заливается в день - значит должно быть планирование и увеличение этого самого места.
Но ведь не может оно расти бесконечно?
WebDAV: edit online
CentOS 6.3
Файлы в директории /var/www/webdav можно обозревать, копировать себе и сохранять в эту директорию. Но как сделать, чтоб можно было открывать тот же опен офис напрямую с этой директории, редактировать и тут же сохранять?
# grep -v '^#' /etc/httpd/conf/httpd.conf | grep -v '^$'
ServerTokens OS
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 60
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Listen 80
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
Include conf.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
UseCanonicalName Off
DocumentRoot "/var/www/html"
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
UserDir disabled
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disabled" line above, and uncomment
# the following line instead:
#
#UserDir public_html
</IfModule>
DirectoryIndex index.html index.html.var
AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
TypesConfig /etc/mime.types
DefaultType text/plain
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
HostnameLookups Off
ErrorLog logs/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
ServerSignature On
Alias /icons/ "/var/www/icons/"
<Directory "/var/www/icons">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule mod_dav_fs.c>
# Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb
</IfModule>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
ReadmeName README.html
HeaderName HEADER.html
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw
LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW
ForceLanguagePriority Prefer Fallback
AddDefaultCharset UTF-8
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
AddHandler type-map var
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Alias /error/ "/var/www/error/"
<IfModule mod_negotiation.c>
<IfModule mod_include.c>
<Directory "/var/www/error">
AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback
</Directory>
</IfModule>
</IfModule>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully
# grep -v '^#' /etc/httpd/conf.d/webdav.conf | grep -v '^$'
<IfModule mod_dav.c>
LimitXMLRequestBody 131072
Alias /webdav "/var/www/webdav"
<Directory /var/www/webdav>
Dav On
Options +Indexes
IndexOptions FancyIndexing
AddDefaultCharset UTF-8
AuthType Basic
AuthName "WebDAV Server"
AuthUserFile /etc/httpd/webdav.users.pwd
Require valid-user
</Directory>
</IfModule>
bash: joun two files
file1:
ivan ivan1
ivan ivan2
ivan ivan3
petr petr1
petr petr2
vlad vlad1
ivan 1
petr 2
vlad 3
ivan ivan1
ivan ivan2
ivan(1) ivan3
petr petr1
petr(2) petr2
vlad(3) vlad1
ivan ivan1
ivan ivan2
ivan ivan3 1
petr petr1
petr petr2 2
vlad vlad1 3
Выборка значений из Redmine
Необходимо найти задачи удовлетворяющие критерию из активных проектов, затем сформировать ссылки на эти задачи и упорядочить их таким образом, чтоб первой строкой шло название проекта, затем пустая строка, затем ссылки принадлежащие проекту, опять пустая строка, затем строка с названием проекта и тд. и отправить на мыло.
#!/bin/sh
NOW=`date +%d%m%y`
mysql -u root -ppassword -e "use redmine; \
SELECT issues.id, name FROM projects \
INNER JOIN issues ON projects.id=issues.project_id \
WHERE assigned_to_id IS NULL AND projects.status = 1 \
AND issues.status_id != 5" > issues_per.project1
sed 1d issues_per.project1 > issues_per.project2
sed 's/^/https:\/\/domain.com\/issues\//' issues_per.project2 > issues_per.project_link
mutt -s "The list of issues without assignee for $NOW" -- user@domain.com < issues_per.project_link
# cat issues_per.project_link
https://domain.com/issues/18 Project1 (description)
https://domain.com/issues/429 Project2 ...
https://domain.com/issues/430 Project2 ...
https://domain.com/issues/500 Project3 ...
https://domain.com/issues/501 Project3
https://domain.com/issues/695 Project4
https://domain.com/issues/696 Project4
https://domain.com/issues/698 Project4
...
Project1 (description)
https://domain.com/issues/18
Project2 ...
https://domain.com/issues/429
https://domain.com/issues/430
Project3 ...
https://domain.com/issues/500
https://domain.com/issues/501
Project4
https://domain.com/issues/695
https://domain.com/issues/696
https://domain.com/issues/698
...
nginx: rewrite to ssl and deny access
Есть файлы виртуальных хостов:
domain1.com:
server {
listen 10.12.13.14:80;
server_name domain1.com;
rewrite ^ https://$server_name$request_uri? permanent; }
domain2.com:
server {
listen 10.12.13.14:80;
server_name domain2.com;
rewrite ^ https://$server_name$request_uri? permanent; }
https-соединение в каждом случае передается своему backend-у.
надо блокировать любые реквесты на 10.12.13.14:80 и на 10.12.13.14:443, которые не содержат domain1.com или domain2.com в URL.
sed + awk. заменить текстовое поле
# cat file.txt
| *Name* | *Monday* | *Tuesday* | *Wednesday* | *Thursday* | *Friday* |
| qwe %EDITCELL{ "label, 0, qwe" }% | yes | yes | yes | yes | yes |
| asd %EDITCELL{ "label, 0, asd" }% | yes | yes | yes | yes | yes |
| zxc %EDITCELL{ "label, 0, zxc" }% | yes | yes | yes | yes | yes |
надо найти колонку для определенного дня недели и выполнить замену yes на no во всех строках.
для поиска этой колонки я использую:
# cat 1mon.sh
#!/bin/bash
FILE="file.txt"
MASS=(`sed '/^| /!d; /^| \*/d' $FILE | awk -F"|" '{print$3}'`)
echo ${MASS[$i]}
# ./1mon.sh
yes
yes
yes