суббота, 28 марта 2020 г.

Возможная причина зависания докер-стека с nexus контейнером

Замечена следующая запись в логах докер-контейнера Nexus:

2020-03-29 04:38:24,057+0000 INFO  [elasticsearch[7C55F644-0DBAA3EE-2F8CDD2A-B80A1828-4E5E2BDB][scheduler][T#1]] *SYSTEM org.elasticsearch.monitor.jvm - [7C55F644-0DBAA3EE-2F8CDD2A-B80A1828-4E5E2BDB] [gc][young][3302][18] duration [958ms], collections [1]/[1.7s], total [958ms]/[1.4s], memory [380.1mb]->[137.5mb]/[1.1gb], all_pools {[young] [245.6mb]->[384.6kb]/[254mb]}{[survivor] [5mb]->[7.6mb]/[73mb]}{[old] [129.5mb]->[129.5mb]/[800mb]}

соответственно, предположение в том, что на локальной машине с DockerDesktopVM работа эластика тормозится работой через драйверы смонтированного раздела /nexus-data на хостовую файловую систему. Ну или как-то связано с этим.

Проблемы достучаться к локальному докер-реестру на Nexus в docker stack

Диспозиция: докер-стек на Docker Desktop (Windows 10) с jenkins-slave, который хочет сделать docker push собранного образа и не может, сообщения:

Get http://nexus:8083/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

и подобное.
Похоже, проблема из-за того, что (и в случае когда) докер на jenkins-slave работает через монтирование docker.sock хоста (как volume) - в результате докер-операции происходят на хосте, и там неизвестен nexus, который известен как сервис внутри докер-сети.
Лечится прописыванием имени хоста докер-реестра (nexus в этом случае) в %system32%/drivers/etc/hosts хоста DockerDesktopVM (винды, то есть).
nexus, порты которого замапены (уже должны быть) на localhost, после обращения изнутри докер-контейнера дженкинс-слейва является в этом смысле localhost'ом тоже -
точно (проверено) работает при тех же портах, прописанных в мэпинге докер-контейнера nexus:

  nexus:
    image: sonatype/nexus3:3.22.0
    volumes:
      - nexusvolume:/nexus-data
    ports:
      - "8081:8081"
      - "8083:8083"
      - "8082:8082"

(фрагмент docker-compose.yml докер-стека)

То есть, в %system32%/drivers/etc/hosts хостовой винды прописывается:

127.0.0.2 nexus
наверняка, работало бы и 127.0.0.1

вторник, 24 марта 2020 г.

Фикс ромбов в консоли на русских буквах, кракозябры, кириллица, консоль, CentOS

если не отображаются русские буквы в консоли Linux (CentOS):
yum localinstall http://mirror.yandex.ru/fedora/russianfedora/russianfedora/free/fedora/releases/19/Everything/x86_64/os/workaround-cyrillic-console-1.0-5.fc19.R.noarch.rpm

пример кириллического шрифта

воскресенье, 22 марта 2020 г.

Много оперативной памяти занято сразу после старта Windows 10

https://imacros.ru/raznoe/sluzhba-politiki-diagnostiki-windows-10.html
После отключения нескольких служб освобождается до 10Гб RAM.

  • Служба политики диагностики (Diagnostic Policy Service).
  • Вспомогательная служба IP (IP Helper) 
  • Модуль поддержки NetBIOS через TCP/IP (TCP/IP NetBIOS Helper)
  • Windows Search

пятница, 20 марта 2020 г.

Не пингуется хост из гостевой Hyper-V, нет интернета в гостевой машине Hyper-V, Windows 10

Виртуальная машина в Hyper-V, использующая Default switch, может лишаться сети из-за VPN-клиента на хосту. Как пишут, дефолт-свич может использовать настройки доступного ему DHCP-сервера, из-за чего по всей видимости могут прописаться не те роуты.
В общем, отключение VPN на момент настройки свича (возможно, при каждой загрузке винды это происходит) возвращает доступность сети и интернета в гостевой машине.

UPD
Это не решает проблему после перезагрузок, на данный момент рабочая схема с созданным внутренним hyper-v свичом с NATом, с которым делится интернетом вайфай-соединение (основное рабочее).

вторник, 3 марта 2020 г.

VirtualBox под Windows 10(host) проблемы с установкой Ubuntu, Debian, CentOS

Непонятные ошибки при установке, послеустановочном запуске.
Нужно отключить Hyper-V в панели управления - вкл/выкл компонентов Windows.

понедельник, 10 июня 2019 г.

MessageSource message.properties Spring i18n интернационализация сообщений




  • @Bean("messageSource")
    public ReloadableResourceBundleMessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();    messageSource.setBasename("classpath:messages/messages"); // любой путь к файлу    messageSource.setDefaultEncoding("UTF-8");    return messageSource;}
     
    // Ключевое - ReloadableRes.... - reloadable - поддержка любого пути. 
     
  •  
    @Componentpublic class Translator {
    
        private static MessageSource messageSource;
        @Autowired    Translator(MessageSource messageSource) {
            Translator.messageSource = messageSource;    }
    
        public static String toLocale(String msgCode, Object[] args) {
            Locale locale = LocaleContextHolder.getLocale();//        Locale tmp = new Locale("ru");        return messageSource.getMessage(msgCode, args, locale);    }
    }
  •  
    Translator.toLocale("respMsg.savedOK", null)
  •  messages_ru_RU.properties: 
    respMsg.savedOK=Сохранено
  •  

воскресенье, 24 июня 2018 г.

Spring MVC @PathVariable with encoded slashes, REST c прямыми слэшами в URL в значении переменной

Use case:
@RequestMapping("/path/{variableAbleCaptureSlashes:.+}
public ResponseEntity<String> method(@PathVariable("variableAbleCaptureSlashes") var) {
    // var must accept values like "/a/b/"
             // нужно, чтобы в var  могли падать значения с прямыми слэшами

}

Решение:
  • разрешить слэши в пути
    System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");
  • отключить в UrlPathHelper url-декодирование 
    @Override    public void configurePathMatch(PathMatchConfigurer configurer) {
            UrlPathHelper urlPathHelper = new UrlPathHelperNonDecoding();        urlPathHelper.setUrlDecode(false);        configurer.setUrlPathHelper(urlPathHelper);    }
  • подставить кастомную имплементацию UrlPathHelper (https://jira.spring.io/browse/SPR-11101)
  • разрешить любые символы в значении pathvariable: @RequestMapping("/path/{variableAbleCaptureSlashes:.+}


@SpringBootApplication
@EnableErrorHandlingpublic class Application extends WebMvcConfigurerAdapter {
    public static void main(String[] args) {
        System.setProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true");        SpringApplication.run(Application.class, args);    }

    @Override    public void configurePathMatch(PathMatchConfigurer configurer) {
        UrlPathHelper urlPathHelper = new UrlPathHelperNonDecoding();        urlPathHelper.setUrlDecode(false);        configurer.setUrlPathHelper(urlPathHelper);    }

    public class UrlPathHelperNonDecoding extends UrlPathHelper {

        public UrlPathHelperNonDecoding() {
            super.setUrlDecode(false);        }

        @Override        public void setUrlDecode(boolean urlDecode) {
            if (urlDecode) {
                throw new IllegalArgumentException("Handler does not support URL decoding.");            }
        }

        @Override        public String getServletPath(HttpServletRequest request) {
            String servletPath = getOriginatingServletPath(request);            return servletPath;        }


        @Override        public String getOriginatingServletPath(HttpServletRequest request) {
            String servletPath = request.getRequestURI().substring(request.getContextPath().length());            return servletPath;        }
    }
}

пятница, 8 декабря 2017 г.

Настройка NTLM и Basic аутентификации JAX-WS клиента в конфигурационном файле Spring

AllowChunking="false" в элементе http-conf:conduit/http-conf:client активизирует аутентификацию NTLM, если не указывать ее тип в http-conf:authorization . Без этой установки будет применяться аутентификация Basic.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:http-conf="http://cxf.apache.org/transports/http/configuration"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
        http://cxf.apache.org/transports/http/configuration
        http://cxf.apache.org/schemas/configuration/http-conf.xsd">

    <beans>

        <!-- Setting AllowChunking="false" activates NTLM authentication.
        Basic authentication will be used without it -->
        <http-conf:conduit name="*.http-conduit"
            xmlns:sec="http://cxf.apache.org/configuration/security"
            xmlns="http://cxf.apache.org/transports/http/configuration">
            <http-conf:client
                    ConnectionTimeout="1000"
                    ReceiveTimeout="10000"
                    AllowChunking="false" />
            <http-conf:authorization>
                <sec:UserName>${auth.username}</sec:UserName>
                <sec:Password>${auth.password}</sec:Password>
            </http-conf:authorization>
        </http-conf:conduit>

        <!--WS Clients-->
        <jaxws:client id="ws-client-id"
                      serviceClass="com.microsoft.schemas.sharepoint.soap.XXXX"
                      address="${endpoints.someaddress}">
        </jaxws:client>

    </beans>

</beans>

Из доков CXF:

Finally, you need to setup the CXF client to turn off chunking. The reason is that the NTLM authentication requires a 3 part handshake which breaks the streaming.

//Turn off chunking so that NTLM can occur
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setConnectionTimeout(36000);
httpClientPolicy.setAllowChunking(false);
http.setClient(httpClientPolicy);

понедельник, 23 октября 2017 г.

Запуск установленной гостевой Windows 10 из хостовой Ubuntu 16.04 через Virtualbox 5

Нужен VirtualBox минимум 5.1, установка описана здесь: http://ubuntuhandbook.org/index.php/2016/07/virtualbox-5-1-released/ .
Если загрузка через EFI, в настройках VirtualBox в разделе "Система" надо поставить галочку "использовать EFI" и при создании raw-диска через createrawvmdk не забыть включить через запятую EFI-раздел с .efi файлами. И дальше как здесь.

понедельник, 3 октября 2016 г.

Return To Castle Wolfenstein 1.4 из исходников на Ubuntu 16.04 64bit

Вариант сборки из исходников на гитхабе https://github.com/hexameron/RTCW-SP-linux (ветвь https://github.com/id-Software/RTCW-SP) описан здесь.
Команду
CFLAGS="-march=i686 -O2 -pipe -fomit-frame-pointer"
для ubuntu 64bit стоит заменить на
CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer" 
Соответственно, все обращения к каталогу src/unix/release-x86-Linux/ следует заменить на src/unix/release-x86_64-Linux/. Этот каталог (release-XXXX) будет единственным созданным внутри src/unix/, поэтому его имя будет очевидным.

При ошибках вида "не найдено SDL/SDL.h" нужно установить libsdl1.2-dev.

Сборка может дать исполняемый файл игры, в котором возникает stack smashing error при запуске.
В этом случае надо отредактировать в исходниках файл src/renderer/tr_image.c: в строке 316 следует заменить
unsigned p1[1024], p2[1024];
на
unsigned p1[2048], p2[2048];
Затем проделать повторную сборку (удалить каталог unix/release-x86_64-Linux/, вызвать make и переписать получившиеся исполняемый .exe и библиотечные файлы .so в целевой каталог с игрой, как в мануале).


четверг, 21 июля 2016 г.

Запуск установленной (гостевой) Windows 7 в VirtualBox из хостовой Ubuntu 16.04.

Предварительно, пользователь должен быть в группе disk и vboxusers ( sudo usermod -a -G disk $USER && sudo usermod -a -G vboxusers $USER). Для корректной работы grub-mkrescue нужно установить xorriso (sudo apt-get install xorriso).
По третьему способу отсюда:

Создаем директорию:

$ mkdir -p ~/.iso/boot/grub

В этой директории любым способом создал файл grub.cfg следующего содержания:
(Раздел menuentry «Windows 7» скопировать со своего grub.cfg, расположенного по адресу /boot/grub/)

insmod part_msdos
set default=0
set timeout=0
menuentry "Windows 7 (loader) (on /dev/sda3)" --class windows --class os {
insmod part_msdos
insmod ntfs
set root='(/dev/sda,msdos3)'
search --no-floppy --fs-uuid --set=root C070671099FC2625
chainloader +1
}


Здесь убрано все лишнее, GRUB проскакивает быстро и незаметно.

Создаем iso-образ с GRUB2:

$ grub-mkrescue --output=/home/$USER/.iso/grub.iso /home/$USER/.iso/

Создаем VMDK-образ:

$ VBoxManage internalcommands createrawvmdk -filename /home/$USER/VirtualBox/Windows7.vmdk -rawdisk /dev/sda -partitions 3,5 -relative

Далее создаем и настраиваем виртуальную машину так же как и во втором способе.
Так же выбираем grub.iso.
Едиственный нюанс: при автоматической установке дополнений гостевой оси, образ этого iso заменится на VBoxGuestAdditions.iso. Поменяйте его обратно.

Еще раз повторюсь, в примерах используются мои настройки. Вносите изменения.

понедельник, 29 декабря 2014 г.

Лечение Doubly encoded to UTF-8 from CP1251



Файлы с битой кодировкой, которые enca определяет как Doubly encoded to XXX from YYY
Отсюда (XXX - utf8, YYY - cp1251):
cat origin.file | iconv -f utf8 -c -t cp1251//TRANSLIT | iconv -f utf8 -c -t cp1251 | iconv -f cp1251 -c -t utf-8 | sed 's/?/И/g' > fixed.file

вторник, 2 декабря 2014 г.

Коды и имена нажатых клавиатурных клавиш в ubuntu


 Взято отсюда
xev | grep -A2 --line-buffered '^KeyRelease' | sed -n '/keycode /s/^.*keycode \([0-9]*\).* 
(.*, \(.*\)).*$/\1 \2/p'
Пример консольного вывода после шлёпанья по кнопкам:

$ xev | grep -A2 --line-buffered '^KeyRelease' |  sed -n '/keycode /s/^.*keycode \([0-9]*\).* (.*, \(.*\)).*$/\1 \2/p'
36 Return
40 Cyrillic_ve
45 Cyrillic_el
38 Cyrillic_ef
139 Undo
190 Redo
68 F2
69 F3

 

пятница, 7 марта 2014 г.

понедельник, 17 февраля 2014 г.

среда, 5 февраля 2014 г.

Строки без повторений с помощью bash

$ <что-то, выводящее в stdout> | sort | uniq

Uniq похоже помнит только предыдущую строку, поэтому повторений вразнобой он не замечает. Перед ним нужно сортировать.

UPD
Как подсказали в комментариях, sort -u делает то же самое.