Servidor de impressão com cotas no FreeBSD (CUPS + PostgreSQL + PyKota)

Tutorial completo de como configurar um servidor de impressão com cotas no FreeBSD. Abordaremos a instalação e configuração do CUPS, PostgreSQL e PyKota.

[ Hits: 6.668 ]

Por: Ricardo Xerfan em 11/12/2018


Instalar e configurar o CUPS



Atualizar o pkg:

# pkg update

Instalar CUPS, filtros, backends e drivers:

# pkg install cups-2.2.8_1 cups-filters-1.16.0_6 cups-smb-backend-1.0_11 cups-pk-helper-0.2.6 cups-pdf-2.6.1_4 hplip-3.17.11 foomatic-db-hpijs-1.4

Obs.: irá solicitar a instalação de outras dependências, basta confirmar:

# pkg install cups-2.2.8_1 cups-filters-1.16.0_6 cups-smb-backend-1.0_11 cups-pk-helper-0.2.6 cups-pdf-2.6.1_4 hplip-3.17.11 foomatic-db-hpijs-1.4
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
All repositories are up to date.
Updating database digests format: 100%
The following 161 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
                cups: 2.2.8_1
                cups-filters: 1.16.0_6
                cups-smb-backend: 1.0_11
                cups-pk-helper: 0.2.6
                cups-pdf: 2.6.1_4
                hplip: 3.17.11
                foomatic-db-hpijs: 1.4
                gnutls: 3.5.19
                trousers: 0.3.14_2
                tpm-emulator: 0.7.4_2
                gmp: 6.1.2
                indexinfo: 0.3.1
                p11-kit: 0.23.14
                libtasn1: 4.13
                ca_root_nss: 3.40
                libffi: 3.2.1_2
                nettle: 3.4
                libidn2: 2.0.5
                libunistring: 0.9.10
                gettext-runtime: 0.19.8.1_1
                libpaper: 1.1.24.4
                avahi-app: 0.7_1
                expat: 2.2.6_1
                gnome_subr: 1.0
                libdaemon: 0.14_1
                gobject-introspection: 1.56.1,1
                python36: 3.6.6_1
                readline: 7.0.3_1
                glib: 2.56.1_2,1
                python27: 2.7.15
                perl5: 5.26.2
                pcre: 8.42
                libiconv: 1.14_11
                dbus-glib: 0.108
                dbus: 1.10.16_1
                libX11: 1.6.6_1,1
                libxcb: 1.13.1
                libXdmcp: 1.1.2_2
                xorgproto: 2018.4
                libXau: 1.0.8_5
                libxml2: 2.9.7
                libpthread-stubs: 0.4
                libSM: 1.2.2_5,1
                libICE: 1.0.9_3,1
                gdbm: 1.13_1
                fontconfig: 2.12.6,1
                freetype2: 2.9.1
                qpdf: 8.2.1
                jpeg-turbo: 2.0.0
                png: 1.6.35
                libijs: 0.35_5
                ghostscript9-agpl-base: 9.25_1
                tiff: 4.0.9_1
                jbigkit: 2.1_1
                poppler-data: 0.4.9
                openjpeg: 2.3.0_2
                lcms2: 2.9
                jbig2dec: 0.15
                libidn: 1.34
                poppler-utils: 0.57.0_1
                nss: 3.40
                nspr: 4.20
                sqlite3: 3.25.1
                poppler-glib: 0.57.0_1
                poppler: 0.57.0_1
                cairo: 1.15.12,2
                xcb-util-renderutil: 0.3.9_1
                xcb-util: 0.4.0_2,1
                pixman: 0.34.0
                libXrender: 0.9.10_2
                libXext: 1.3.3_3,1
                mesa-libs: 18.1.9
                libxshmfence: 1.2_4
                libXxf86vm: 1.1.4_3
                libXfixes: 5.0.3_2
                libXdamage: 1.1.4_5
                libdrm: 2.4.93,1
                libpciaccess: 0.13.5
                pciids: 20180921
                libunwind: 20170615
                libfontenc: 1.1.3_3
                font-util: 1.3.1
                pcre2: 10.31
                colord: 1.3.5
                polkit: 0.114_1
                spidermonkey52: 52.8.0_1
                icu: 62.1_2,1
                argyllcms: 1.9.2_3
                libXrandr: 1.5.1_2
                libXinerama: 1.1.4_2,1
                libXScrnSaver: 1.2.3_2
                samba47: 4.7.10_1
                libsunacl: 1.0.1
                cmocka: 1.1.1_1
                openldap-client: 2.4.46
                py27-dnspython: 1.15.0
                py27-setuptools: 40.0.0
                tevent: 0.9.37
                talloc: 2.1.14
                py27-iso8601: 0.1.11
                popt: 1.16_2
                libinotify: 20180201
                jansson: 2.11
                gamin: 0.1.10_9
                tdb: 1.3.16,1
                libarchive: 3.3.2_1,1
                lzo2: 2.10_1
                liblz4: 1.8.3,1
                py27-qt5-widgets: 5.9.2_5
                qt5-widgets: 5.11.2
                qt5-gui: 5.11.2
                xcb-util-wm: 0.4.1_3
                xcb-util-keysyms: 0.4.0_1
                xcb-util-image: 0.4.0_1
                libxkbcommon: 0.8.0
                libXi: 1.7.9_2,1
                xorg-fonts-truetype: 7.7_1
                font-misc-meltho: 1.0.3_3
                mkfontscale: 1.1.3_2
                mkfontdir: 1.0.7
                font-misc-ethiopic: 1.0.3_3
                font-bh-ttf: 1.0.3_3
                encodings: 1.0.4_4,1
                dejavu: 2.37
                harfbuzz: 1.9.0
                graphite2: 1.3.12
                qt5-network: 5.11.2
                qtchooser: 39
                qt5-core: 5.11.2
                xdg-utils: 1.1.1
                xset: 1.2.4_2
                libXmu: 1.1.2_5,1
                libXt: 1.1.5_2,1
                libXfontcache: 1.0.5_5
                xprop: 1.2.3
                hicolor-icon-theme: 0.15
                qt5-dbus: 5.11.2
                py27-qt5-gui: 5.9.2_2
                qt5-imageformats: 5.11.2
                webp: 1.0.0_1
                giflib: 5.1.4
                libmng: 1.0.10_3
                lcms: 1.19_6,1
                jasper: 1.900.1_17
                py27-qt5-core: 5.9.2_6
                qscintilla2-qt5: 2.10.4
                qt5-printsupport: 5.11.2
                net-snmp: 5.7.3_18
                sane-backends: 1.0.27_4
                py27-pillow: 5.2.0
                tk86: 8.6.8_2
                libXft: 2.3.2_3
                tcl86: 8.6.8
                py27-tkinter: 2.7.15_6
                py27-sip: 4.19.8,1
                py27-qt5-dbussupport: 5.9.2_1
                py27-dbus: 1.2.0_1
                pydbus-common: 1.2.0_2
                py27-gobject: 2.28.6_8
                py27-cairo: 1.14.1
                foomatic-db: 20180926

Number of packages to be installed: 161

The process will require 1 GiB more space.
236 MiB to be downloaded.

Proceed with this action? [y/N]:

A instalação pede para adicionar as linhas abaixo ao arquivo /etc/rc.conf, faça isso:

cupsd_enable="YES"
devfs_system_ruleset="system"
tcsd_enable="YES"
tcsd_mode="emulator"
tpmd_enable="YES"
snmpd_enable="YES"
#snmpd_flags="-a"
#snmpd_conffile="/usr/local/share/snmp/snmpd.conf /etc/snmpd.conf"
#snmptrapd_enable="YES"
#snmptrapd_flags="-a -p /var/run/snmptrapd.pid"

Obs.: algumas dessas linhas não são necessárias para o ambiente em questão.

Editar o arquivo /usr/local/etc/cups/cupsd.conf.

# ee /usr/local/etc/cups/cupsd.conf

Obs.: ATENÇÃO para a linha "Allow All", a mesma libera acesso para todos os endereços IPs de todas as redes e subredes. Configurar de acordo com a rede a ser utilizada.

Liberar o acesso ao cups:

Listen localhost:631

alterar para:

Listen 631

ou:

Port 631

Liberar o acesso ao frontend do CUPS:

Basta adicionar a linha "Allow All" (sem aspas) dentro da seção "<Location /> </Location>", após a diretiva "Order allow,deny":

# Restrict access to the server...
<Location />
Order allow,deny
Allow All
</Location>

Liberar o acesso à página de administração do frontend do CUPS:

Basta adicionar a linha "Allow All" (sem aspas) dentro da seção "<Location /admin> </Location>", após a diretiva "Order allow,deny":

# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
Allow All
</Location>

Liberar o acesso à página de configuração do frontend do CUPS:

Basta adicionar a linha "Allow All" (sem aspas) dentro da seção "<Location /admin/conf> </Location>", após a diretiva "Order allow,deny":

# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow All
</Location>

Liberar o acesso à página de logs do frontend do CUPS:

Basta adicionar a linha "Allow All" (sem aspas) dentro da seção "<Location /admin/log> </Location>", após a diretiva "Order allow,deny":

# Restrict access to log files...
<Location /admin/log>
AuthType Default
Require user @SYSTEM
Order allow,deny
Allow All
</Location>

Liberar a visualização de impressão por nome de usuário dentro do CUPS:

Adicionar a cláusula "none" sem aspas dentro da seção "<Policy default> </Policy>" na mesma linha e logo em seguida da diretiva "JobPrivateValues default" e comentar a cláusula "default":

# Set the default printer/job policies...
<Policy default>
# Job/subscription privacy...
JobPrivateAccess default
JobPrivateValues none #default
SubscriptionPrivateAccess default
SubscriptionPrivateValues default

...

</Policy>

Reiniciar o daemon do CUPS:

# /usr/local/etc/rc.d/cupsd restart

ou

# service cupsd restart

Adicionar uma impressora para testes dentro do frontend do CUPS:

Página de Administração/ Adicionar impressora/

Escolha o backend que for de sua preferência, pode ser o:

AppSocket/HP JetDirect

Para este tutorial foi utilizado o backend citado acima.

No campo "Conexão" coloque a cláusula "socket" seguida de "://", depois o IP da impressora e a porta padrão do CUPS "9100":

socket://IP.da.Impressora:9100

Clique no botão "Continuar".

Na próxima página:

Adicione o nome, descrição e localização da impressora e marque a caixa de seleção "Compartilhar essa impressora", depois clique no botão "Continue".

Na próxima página:

Clique sobre o nome da fabricante da impressora escolhida, clique no botão "Continuar".

Na próxima página:

Escolha o driver de acordo com o modelo da impressora escolhida e clique no botão "Adicionar impressora".

Na próxima página (definir opções de impressora):

Defina as opções padrões (General, Banners e Políticas) para a impressora e clique no botão "Definir opções padrão".

Pronto! A impressora irá aparecer instalada e informará o status da mesma (ociosa, aceitando trabalhos, compartilhada) no menu "Impressoras". Basta agora imprimir uma página de testes:

Clique no menu suspenso escrito "Manutenção" e depois selecione a opção "Imprimir página de teste".

ATENÇÃO: no frontend do CUPS deverá aparecer uma página informando o nome de usuário que fez a impressão:

Clique no menu impressoras, depois na impressora que você instalou e configurou e então clique em "Mostrar todos os trabalhos". Vai aparecer algo parecido com:

ID
Nome
Usuário
Tamanho
Páginas
Estado
Controle
...

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalar e configurar o CUPS
   3. Instalar e realizar a configuração básica do PostgreSQL
   4. Instalar e realizar a configuração básica do PyKota
Outros artigos deste autor

Configurando o FreeBSD e PyKota para receber o JPyKotaGUI

Leitura recomendada

Acentuação gráfica no console FreeBSD/FreeNAS e montagem de pastas de compartilhamento Windows com acentuação

Introdução ao FreeBSD

FreeBSD 10 com GNOME 2 - Instalação no VirtualBox

Configurando rede wireless com wpa_supplicant

Instalação de Aplicativos no FreeBSD

  
Comentários
[1] Comentário enviado por xerxeslins em 12/12/2018 - 15:33h

Artigo gigante! Bem, vou favoritar, para consultar um dia quando for usar FreeBSD. ;-]

--
"There are lots of Linux users who don't care how the kernel works, but only want to use it. That is a tribute to how good Linux is." - Linus Torvalds

[2] Comentário enviado por pbonfanti em 04/01/2019 - 08:13h

Excelente artigo, pretendo testar o sistema ,mas acho importante informar logo no início do artigo com qual Release do FreeBSD você testou.
Na linha Logo abaixo "Testes restantes", após instalar o postgresql, o comando
$ pgsql dbteste
Retorna comando não encontrado, mas responde a:
$ psql dbteste
dbteste# \list

[3] Comentário enviado por ricardo-xerfan em 07/01/2019 - 23:05h


[1] Comentário enviado por xerxeslins em 12/12/2018 - 15:33h

Artigo gigante! Bem, vou favoritar, para consultar um dia quando for usar FreeBSD. ;-]

--
"There are lots of Linux users who don't care how the kernel works, but only want to use it. That is a tribute to how good Linux is." - Linus Torvalds



Tamo junto meu nobre!!

[4] Comentário enviado por ricardo-xerfan em 07/01/2019 - 23:20h


[2] Comentário enviado por pbonfanti em 04/01/2019 - 08:13h

Excelente artigo, pretendo testar o sistema ,mas acho importante informar logo no início do artigo com qual Release do FreeBSD você testou.
Na linha Logo abaixo "Testes restantes", após instalar o postgresql, o comando
$ pgsql dbteste
Retorna comando não encontrado, mas responde a:
$ psql dbteste
dbteste# \list


Fale meu nobre!!

Obrigado pelo retorno!! O comando certo é "psql dbteste".

Percebi, também, que após a publicação, não ficou boa a "identação" deste exemplo do código no arquivo "usr/local/lib/python2.7/site-packages/pykota/storages/pgstorage.py " na linha 149:

return self.database.adapter.adapt_inline(field)

Então, pode ser que apresente erro de "identação". Caso ocorra, basta "identar" o código de acordo com as outras linhas do bloco em questão.

Qualquer dúvida ou observação, basta chamar!

Grande abraço!

[5] Comentário enviado por ricardo-xerfan em 10/01/2019 - 11:41h

Comentários relevantes ao tutorial: LEIA COM ATENÇÃO:

Para adicionar impressoras em compartilhamentos Windows, vc pode fazer da seguinte forma:

01. Configurar, no servidor onde está o CUPS, o arquivo "smb4.conf" (/usr/local/etc/smb4.conf) de acordo com seu ambiente;

02. Adicionar a impressora com a opção "PyKota managed Windows Printer via SAMBA (PyKota+Unknown)";

03. Configurar a conexão da seguinte forma:

cupspykota:smb://username:[email protected]/hostname_or_IP/printer_name

Exemplo:

cupspykota:smb://ricardo:[email protected]/192.168.1.5/Lexmark%20PROTOCOLO

OBS.: Se o nome da impressora contiver espaço, no lugar do espaço, coloque "%20" (sem aspas). Exemplo:

Nome real da impressora: Lexmark PROTOCOLO

Como deve ser colocado na conexão: Lexmark%20PROTOCOLO

ATENÇÃO: Por padrão o CUPS não permite que os usuários remotos façam requisições de impressões ou gerenciamento nas impressoras que estão configuradas nele. Portanto, para que qualquer usuário remoto, "dentro de sua rede", consiga realizar tais tarefas, é necessário que vc habilite isso no CUPS através de linha de comando. Basta digitar no terminal o seguinte:

cupsctl --share-printers

OBS.1: Se vc não fizer o comando acima, os usuários remotos não vão conseguir fazer nada na impressora.
OBS.2: Para que vc possa instalar a impressora em um host de sua rede, é necessário ter privilégios administrativos. Basta adicionar a impressora com uma conta de administrador que os outros usuários terão acesso a mesma.
OBS.3: Para adicionar a impressora a um host Windows, faça da seguinte forma:
OBS.3.1: Abrir o frontend de gerenciamento do CUPS;
OBS.3.2: Ir no menu impressoras;
OBS.3.3: Selecionar, da sua lista de impressoras que já foram adicionadas ao CUPS, a impressora que vc deseja;
OBS.3.4: Copiar a URL da impressora. Exemplo:
https://IP-Servidor-CUPS:631/printers/Printer-PROTOCOLO01
OBS.3.5: Ir no painel de controle do Windows, em "Dispositivos e Impressoras" e depois em "Adicionar uma impressora". Clicar em "A impressora que eu quero não está na lista". Na tela que vai abrir, selecionar a opção "Selecionar uma impressora compartilhada pelo nome". Colar no espaço indicado a URL que foi copiada. Depois clicar em "Avançar" e proceder normalmente com as outras opções. Lembrando mais uma vez que É NECESSÁRIO TER PRIVILÉGIOS ADMINISTRATIVOS para adicionar a impressora no host Windows;
OBS.3.6: Não esquecer de configurar as permissões dentro do PyKota em linha de comando (adicionar impressora, usuário e atrelar a impressora ao usuário), como foi mostrado no tutorial.

Grande abraço!


Contribuir com comentário