├── .dockerignore ├── .gitignore ├── Dockerfile ├── Makefile ├── README.md ├── build ├── my-init.sh ├── odbc.ini ├── odbcinst.ini └── setup.sh ├── docker-compose.yml └── postgres └── Dockerfile /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | .dockerignore 3 | .git -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.tar.gz 2 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | 3 | LABEL maintainer "Enderson Maia " 4 | 5 | RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo \ 6 | && yum -y update \ 7 | && yum -y install \ 8 | postgresql \ 9 | postgresql-odbc \ 10 | wget \ 11 | && ACCEPT_EULA=Y yum install -y msodbcsql17 \ 12 | && rm -rf /var/cache/yum/* \ 13 | && yum clean all 14 | 15 | RUN DUMB_INIT_SHA256="37f2c1f0372a45554f1b89924fbb134fc24c3756efaedf11e07f599494e0eff9" \ 16 | && wget -O /usr/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 \ 17 | && echo "37f2c1f0372a45554f1b89924fbb134fc24c3756efaedf11e07f599494e0eff9 */usr/bin/dumb-init" | sha256sum -c - \ 18 | && chmod +x /usr/bin/dumb-init 19 | 20 | ADD 19-07-26-DBACCESS_LINUX_X64_BUILD-20181212.TAR.GZ /opt/totvs/dbaccess64 21 | 22 | COPY /build /build 23 | 24 | RUN /build/setup.sh 25 | 26 | EXPOSE 7890 27 | 28 | WORKDIR /opt/totvs/dbaccess64/multi 29 | 30 | ENTRYPOINT [ "/usr/bin/dumb-init", "--" ] 31 | 32 | CMD [ "/usr/local/bin/my-init.sh", "dbaccess" ] 33 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | USER = endersonmaia 2 | NAME = $(USER)/totvs-dbaccess 3 | VERSION = 18.2.1.2 4 | 5 | .PHONY: all 6 | all: build 7 | 8 | .PHONY: build 9 | build: 10 | docker image build --no-cache -t $(NAME):$(VERSION) --rm . 11 | 12 | .PHONY: tag_latest 13 | tag_latest: 14 | docker image tag $(NAME):$(VERSION) $(NAME):latest 15 | 16 | .PHONY: release 17 | docker image push $(NAME):$(VERSION) 18 | $(NAME):latest -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | *REPOSITÓRIO ARQUIVADO* 2 | 3 | # TOTVS DBAccess 64bits Dockerfile 4 | 5 | ## O que é Docker ? 6 | 7 | Docker é um _runtime_ para execução de LinuX _Containers_ (LXC). Este repositório contém um conjunto de scripts para construir uma imagem do `dbaccess64` que poderá ser executada em qualquer host Linux que tenha o [Docker Engine](https://docs.docker.com/installation/) instalado. 8 | 9 | ## Como usar esta imagem ? 10 | 11 | Você pode clonar este reposutório e construir a sua própria imagem. O repositóprio pretende manter-se em sincronia com os lançamentos dos novos binários do TOTVS DBAccess fornecidos pela TOTVS. Então, para cada release, haverá uma tag no repositório. 12 | 13 | Quando clonar o repositório, basta fazer o checkout para a tag específica, baixar o arquivo `.tar.gz` do DBAccess correspondente àquela tag (https://suporte.totvs.com/download), e executar o comando `$ docker build .`. 14 | 15 | ### O jeito fácil! 16 | 17 | Instale o Docker Compose, e execute os comandos a seguir : 18 | 19 | ```` 20 | $ git clone https://github.com/endersonmaia/totvs-dbaccess-docker 21 | $ git checkout 20160402-16-11-10 22 | $ 23 | $ docker-compose up 24 | ```` 25 | 26 | ### Fazendo você mesmo 27 | 28 | Para construir sua imagem, execute os comandos a seguir: 29 | 30 | ```` 31 | $ git clone https://github.com/endersonmaia/totvs-dbaccess-docker 32 | $ cd totvs-dbaccess-docker 33 | $ git checkout 20141119 34 | $ docker build -t dbaccess64-20141119 . 35 | ```` 36 | 37 | ### Executando o DBAccess64 38 | 39 | Após ter construído a imagem, é possível executá-la e linkar a um container com PostgreSQL 9.3. 40 | 41 | ```` 42 | $ docker run -d --name postgres \ 43 | -e POSTGRES_USER=protheus \ 44 | -e POSTGRES_PASSWORD=protheus \ 45 | postgres:9.3 46 | $ docker run -d --name dbaccess \ 47 | --link postgres:postgres \ 48 | -p 7890:7890 \ 49 | dbaccess64-20141119 50 | $ docker ps 51 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52 | b99abd595634 dbacces64-20141119 "/docker-entrypoint. About a minute ago Up About a minute 0.0.0.0:7890->7890/tcp dbaccess 53 | e472b722662d postgres:9.3 "/docker-entrypoint. About a minute ago Up About a minute 5432/tcp postgres 54 | ```` 55 | 56 | Agora basta que você acesse o DBMonitor, apontando para o IP do seu host que está executando o Docker Engine, na porta 7890, como exibido acima. 57 | 58 | ### Conectando em um banco já existente 59 | 60 | Caso você não queira usar o PostgreSQL 9.3 fornecido como imagem Docker, você pode informar os dados de acesso a um PostgreSQL ou SQL Server existente. 61 | 62 | #### Com DATABASE_URL 63 | 64 | Você pode usar uma variável de ambiente, DATABASE_URL como a seguir `[postgres|sqlserver]://:@:/`. 65 | 66 | Por exemplo: 67 | 68 | ```` 69 | $ docker run -d --name dbaccess \ 70 | -e DATABASE_URL=sqlserver://protheus:mypassword@databaseserver.example.com:1433/protheus \ 71 | -p 7890:7890 \ 72 | dbaccess64-20141119 73 | ```` 74 | 75 | #### Variáveis individuais 76 | 77 | Pode ser necessário usar variáveis separadas quando você tem caracteres especiais no nome de usuário e/ou senha, por ex: 78 | 79 | ```` 80 | $ docker run -d --name dbaccess \ 81 | -e DB_HOST=postgres.example.com \ 82 | -e DB_PORT=5432 \ 83 | -e DB_USER=protheus \ 84 | -e DB_PASS=p@55W0rD \ 85 | -e DB_NAME=protheus \ 86 | -p 7890:7890 \ 87 | dbaccess64-20141119 88 | ```` 89 | 90 | #### Via docker-compose 91 | 92 | Você ainda pode alterar o arquivo `docker-compose.yml` e ajustar as varáveis por lá, e usar o comando `docker-compose up`, sempre que precisar levantar o DBAccess. 93 | 94 | ### Executando o DBMonitor 95 | 96 | Também é possível executar a interface do DBMonitor, dentro de um container, basta exportar o $DISPLAY para o servidor X11 da sua máquina. 97 | 98 | Se você estiver num OS X, você pode usar o [XQuartz](http://xquartz.macosforge.org/landing/), se estiver no Windows pode usar o [MobaXtrem](http://mobaxterm.mobatek.net/). 99 | 100 | #### No Linux 101 | 102 | Considerando que você executa o Docker Engine localmente. 103 | 104 | ```` 105 | $ docker run -ti --rm \ 106 | -e DISPLAY=$DISPLAY \ 107 | -v /tmp/.X11-unix:/tmp/.X11-unix \ 108 | dbaccess64-20141119 dbmonitor 109 | ```` 110 | 111 | #### No OS X 112 | 113 | Instale o XQuartz (http://xquartz.macosforge.org/landing/). 114 | 115 | ```` 116 | $ open -a XQuartz 117 | $ socat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\" 118 | ```` 119 | 120 | O comando `socat` deve ser executado dentro do terminal do XQuartz. 121 | 122 | Em outro terminal : 123 | 124 | ```` 125 | $ docker build -t dbmonitor . 126 | $ docker run -ti --rm \ 127 | -e DISPLAY=192.168.59.3:0 \ 128 | dbaccess64-20141119 dbmonitor 129 | ```` 130 | 131 | Você deve informar o IP do seu OS X que seja acessível pelo `DOCKER_HOST`. 132 | 133 | # Referência 134 | 135 | * http://tdn.totvs.com/display/tec/Character+Set+x+Collation 136 | * http://tdn.totvs.com/display/public/mp/PostgreSQL 137 | * http://tdn.totvs.com/display/tec/Melhoria+-+Suporte+ao+psqlODBC+09.01.0100 138 | * http://www.edivaldobrito.com.br/instalando-o-microsiga-protheus-com-postgresql-no-linux-parte-2/ 139 | * https://docs.docker.com/userguide/ 140 | * https://github.com/docker/docker/issues/8710#issuecomment-71113263 141 | * http://tdn.totvs.com/display/tec/DBAccess+-+Como+criar+uma+fonte+de+dados+para+uso+com+Microsoft+SQL+Server+-+Linux 142 | -------------------------------------------------------------------------------- /build/my-init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | if [ ! -z ${DATABASE_URL+x} ]; then 5 | pattern='^(postgres|mssql):\/\/([^:]+):([^@]+)@([^:]+):([^\/]\d+)\/(.+)' 6 | 7 | if [[ "${1}" =~ $pattern ]]; then 8 | export DB_TYPE=${BASH_REMATCH[1]} 9 | export DB_USER=${BASH_REMATCH[2]} 10 | export DB_PASS=${BASH_REMATCH[3]} 11 | export DB_HOST=${BASH_REMATCH[4]} 12 | export DB_PORT=${BASH_REMATCH[5]} 13 | export DB_NAME=${BASH_REMATCH[6]} 14 | else 15 | echo "[ERROR] Não foi possível obter configuração a partir de \$DATABASE_URL." > /dev/stderr 16 | exit 1 17 | fi 18 | else 19 | /bin/sed 's/{{DB_USER}}/'"${DB_USER}"'/' -i /etc/odbc.ini 20 | /bin/sed 's/{{DB_PASS}}/'"${DB_PASS}"'/' -i /etc/odbc.ini 21 | /bin/sed 's/{{DB_HOST}}/'"${DB_HOST}"'/' -i /etc/odbc.ini 22 | /bin/sed 's/{{DB_PORT}}/'"${DB_PORT}"'/' -i /etc/odbc.ini 23 | /bin/sed 's/{{DB_NAME}}/'"${DB_NAME}"'/' -i /etc/odbc.ini 24 | fi 25 | 26 | /opt/totvs/dbaccess64/tools/dbaccesscfg \ 27 | -u ${DB_USER} \ 28 | -p ${DB_PASS} \ 29 | -d ${DB_TYPE} \ 30 | -a ${DB_TYPE} \ 31 | -o "clientlibrary=/usr/lib64/libodbc.so" \ 32 | -g "LicenseServer=${LICENSE_SERVER};LicensePort=${LICENSE_SERVER_PORT};ByYouProc=0;ODBC30=1" 33 | 34 | if [ "$1" = 'dbaccess' ]; then 35 | 36 | until echo -n > /dev/tcp/${DB_HOST}/${DB_PORT} 37 | do 38 | echo "[INFO] Esperando serviço de banco de dados..." 39 | sleep 0.5 40 | done 41 | 42 | echo "[INFO] Conectado ao serviço de banco de dados." 43 | 44 | exec "/opt/totvs/dbaccess64/multi/dbaccess64" 45 | 46 | fi 47 | 48 | exec "$@" 49 | -------------------------------------------------------------------------------- /build/odbc.ini: -------------------------------------------------------------------------------- 1 | [postgres] 2 | Description = PostgreSQL connection to protheus 3 | Driver = PostgreSQL 4 | Database = {{DB_NAME}} 5 | Servername = {{DB_HOST}} 6 | UserName = {{DB_USER}} 7 | Password = {{DB_PASS}} 8 | Port = {{DB_PORT}} 9 | Protocol = 9.3 10 | ReadOnly = No 11 | RowVersioning = No 12 | ShowSystemTables = No 13 | ConnSettings = 14 | MaxLongVarcharSize = 2000 15 | 16 | [mssql] 17 | Description = Microsoft ODBC Driver 17 for SQL Server 18 | Driver = ODBC Driver 17 for SQL Server 19 | Database = {{DB_NAME}} 20 | Server = tcp:{{DB_HOST}},{{DB_PORT}} 21 | ; http://tdn.totvs.com/display/tec/DBAccess+-+Como+criar+uma+fonte+de+dados+para+uso+com+Microsoft+SQL+Server+-+Linux 22 | AnsiNPW = Yes 23 | QuotedID = Yes 24 | AutoTranslate = Yes -------------------------------------------------------------------------------- /build/odbcinst.ini: -------------------------------------------------------------------------------- 1 | [ODBC Driver 17 for SQL Server] 2 | Description=Microsoft ODBC Driver 17 for SQL Server 3 | Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.4.so.1.1 4 | UsageCount=1 5 | 6 | [PostgreSQL] 7 | Description=PostgreSQL 8 | Driver=/usr/lib64/psqlodbc.so -------------------------------------------------------------------------------- /build/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cp /build/odbc.ini /etc 4 | cp /build/odbcinst.ini /etc 5 | cp /build/my-init.sh /usr/local/bin 6 | 7 | odbcinst -i -s -l -f /etc/odbc.ini 8 | 9 | echo "/opt/totvs/dbaccess64/multi/" > /etc/ld.so.conf.d/dbaccess64-libs.conf 10 | /sbin/ldconfig 11 | 12 | chmod +x /opt/totvs/dbaccess64/dbmonitor 13 | chown -R root:root /opt/totvs 14 | 15 | rm -rf /build 16 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | 5 | dbaccess: 6 | build: ./ 7 | ports: 8 | - 7890:7890 9 | env_file: ./.env 10 | 11 | database: 12 | build: ./postgres 13 | environment: 14 | - POSTGRES_USER=${DB_USER} 15 | - POSTGRES_DB=${DB_NAME} 16 | - POSTGRES_PASSWORD=${DB_PASS} -------------------------------------------------------------------------------- /postgres/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM postgres:10.6 2 | RUN localedef -i pt_BR -c -f ISO-8859-1 -A /usr/share/locale/locale.alias pt_BR.iso88591 3 | ENV LANG pt_BR.iso88591 --------------------------------------------------------------------------------