Блог программиста
не только о программировании

Отладка собранного в контейнере webassembly кода вне этого контейнера

Собирать webassebmly файл внутри docker-контейнера достаточно удобно, потому что не приходится следить за окружением и что-то постоянно доустанавливать и фиксить. Однако, есть небольшая тонкость при отладке собранных файлов.

Заключается она в том, что пути внутри контейнера и в любой другой среде скорее всего будут отличаться. Поэтому необходимо это учитывать при сборке. Например, есть файл test.c со следующим содержимым.

#include <stdlib.h>
#include <stdio.h>

int main() {
  int i = 0;
  for (int j = 0; j < 10; j++)
  {
	  i++;
  }
  return 0;
}

Собираем код следующей командой

docker run --expose=8080 --rm -v $(pwd):/src -u $(id -u):$(id -g) emscripten/emsdk emcc -g test.c -o test.html -ffile-prefix-map=/src=$(pwd)

Далее необходимо настроить свой браузер (на примере хрома) для отладки. После чего достаточно поднять любой веб-сервер для того, чтобы можно было обратиться к каталогу из браузера. Например, пакет serve из npm. Отладка webassembly кода станет доступна точно также, как и отладка js-кода.

webassembly debugging in chrome
Комментариев к записи Отладка собранного в контейнере webassembly кода вне этого контейнера нет
Метки: , , ,
Категории: Dev

Исправляем отсутствие доступа на запись в каталог внутри docker-контейнера

Иногда так бывает, что при монтировании каталога в контейнер необходимо иметь права на запись, однако по каким-то причинам запись недоступна

version: "3"
services:
  php:
    build:
      context: ./configs
      dockerfile: php74.dockerfile
    env_file:
      - configs/vars.env
    volumes:
      - ./:/var/www
      - ./configs/xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

Вот пример конфигурации, допустим внутри www есть каталог log, в который необходимо что-то писать. Для этого достаточно на хост-машине отредактировать права на каталог так, как это требуется для работы (ниже пример, не надо так делать без необходимости).

[dv4mp1r3@mbp ipinfo]$ ls -l | grep log
drwxrwxrwx. 2 dv4mp1r3 dv4mp1r3    4096 Jan  2 23:31 log

А происходить так может потому, что пользователь, из под которого запускается процесс внутри контейнера может не совпадать с владельцем каталога, поэтому и менять права надо вне контейнера.

Комментариев к записи Исправляем отсутствие доступа на запись в каталог внутри docker-контейнера нет
Метки: ,
Категории: Dev

Удаленная отладка с помощью xdebug 3

Совсем недавно (чуть больше месяца назад на момент написания) вышел xdebug версии 3.0.0. И сразу же после того, как докер подхватил изменения, удаленная отладка перестала работать.

А дело все в том, что в конфиге xdebug изменились названия параметров. Пример настройки для новой версии ниже.

xdebug.mode=debug
xdebug.client_host=172.17.0.1
xdebug.client_port=9001

Более подробно про переезд с 2.x на 3.x можно почитать в официальной документации.

UPD: необходимо экспортировать переменную для отладки cli-скриптов

export XDEBUG_SESSION=1
Комментариев к записи Удаленная отладка с помощью xdebug 3 нет
Метки: , , ,
Категории: Dev

Сборка и подключение nginx-dav-ext-module к работающему nginx на CentOS 8

На днях столкнулся с необходимостью настроить webdav на nginx, а для поддержки некоторых клиентов нужно собрать дополнительный модуль nginx-dav-ext-module. При этом пересобирать nginx целиком не хотелось. Под катом компоновка материала из похожей статьи на хабре с дополнениями от себя.

Комментариев к записи Сборка и подключение nginx-dav-ext-module к работающему nginx на CentOS 8 нет
Метки: , ,
Категории: Common

Установка и сборка python версии 3.8.x в CentOS 7/8

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

Комментариев к записи Установка и сборка python версии 3.8.x в CentOS 7/8 нет
Категории: Common

Коротко о проблемах GUI в линуксах

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

Комментариев к записи Коротко о проблемах GUI в линуксах нет
Категории: Common

Установка Java на Android в 2020

Почти ровно два года назад было написано обновление к тому, как устанавливать java на android с использованием termux. На сегодняшний день эта запись больше не актуальна по некоторым причинам, о которых расскажу под катом. Также вы там найдете решение как поставить java сегодня так, что и рут не потребуется.

Комментариев к записи Установка Java на Android в 2020 нет
Метки: , , , ,
Категории: Common

Запуск сервисов в termux на android

termux services android

Многие продвинутые пользователи android зачастую так или иначе начинают работать с операционной системой так, как если бы они работали с обычным linux-дистрибутивом. Запущенный терминал, а иногда и ssh-сессия, использование линуксовых утилит, а иногда даже и запуск окружения рабочего стола. Запуск сервисов также является типовой задачей при таком использовании устройства. Под катом описываю, как запускать сервисы в termux на android.

Комментариев к записи Запуск сервисов в termux на android нет
Метки: , , ,
Категории: Common

Как настроить работу с телеграм в Яндекс.Облакe

Никак :)

curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to telegram.org:443

Или пускайте трафик через прокси/vpn.

Комментариев к записи Как настроить работу с телеграм в Яндекс.Облакe нет
Метки: , ,
Категории: Common

Какой python медленный и почему?

Пару лет назад у меня было несколько свободных часов, которые я посвятил сравнению наиболее распространенных реализаций python между собой, а также почему при написании многопоточного кода время выполнения может только замедлиться (на изображении выше как раз показан один из простых примеров).

Один из заданных после доклада вопросов меня тогда смутил, а расширение тематики у блога позволило не только опубликовать материал тут, но и дополнительно разобраться в том вопросе. Подробности под катом. 

Комментариев к записи Какой python медленный и почему? нет
Категории: Dev