Copyright
Copyright © José
Luis Lara Carrascal 2008-2018
Sumario
Introducción
Características
Preliminares
Instalación
Configurar el inicio de Polipo
Configurar los clientes
Uso de Polipo con Tor y Privoxy
Iniciamos Polipo
Controlar el tamaño de la caché de Polipo
Enlaces
Introducción
El hecho de
poder almacenar en un directorio caché en el disco todas las
páginas que voy visualizando y la gestión eficaz que se
hace de las peticiones de los navegadores clientes (mucho más
lentos para gestionar esta tarea) hacen de este programa, cuyo nombre
es Polipo,
una herramienta indispensable para los usuarios de conexiones a
internet por módem tradicional, facilitando considerablemente la
navegación y sobre todo, aprovechando las capacidades
enormes de los discos duros actuales, poder trabajar con cachés
de 1, 2 o 3 GB según las necesidades e intensidad del usuario en
su navegación diaria.
Basado en WWWOFFLE,
mejora los defectos que este último tiene en cuanto a la
posibilidad de
cerrar la carga y almacenamiento de la página al mismo tiempo
que el navegador cliente cierra, detiene o cancela la carga de una
página. WWWOFFLE
en cambio, no dispone de esta característica y hace caso omiso
descargando la página en su totalidad, aunque el navegador
cliente haya cancelado la petición de la misma, lo que supone
una degradación considerable de la navegación con WWWOFFLE.
Características
* Usa pipelining HTTP/1.1 si detecta que el servidor remoto lo soporta, si las peticiones entrantes son canalizadas o
entran en múltiples conexiones (esto es mejor que el uso
simple de conexiones persistentes, cómo por ejemplo, hace Squid).
* Almacena el segmento inicial de una instancia si la
descarga se ha interrumpido, y si es necesario, lo completa más
tarde usando el rango de peticiones.
* Actualiza las peticiones de los clientes a HTTP/1.1,
aún en el caso de que éste las haya hecho cómo
HTTP/1.0 y adapta las respuestas del servidor a las capacidades del
cliente (esto implica una conversión desde/a HTTP/1.1)
* Soporte completo de IPv6 (salvo para direcciones locales)
* Uso opcional de la técnica Poor Man's Multiplexing para una reducción fuerte de la latencia
* Puede utilizarse para navegación anónima de forma directa con Tor.
Preliminares
1) Comprobar que la ruta de instalación de los binarios del programa la tenemos en nuestro PATH
Abrimos una ventana de terminal y ejecutamos el siguiente comando:
[jose@Fedora-18 ~]$ echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jose/bin
|
Si no aparece entre las rutas mostradas el directorio /usr/local/bin, abrimos un editor de texto y añadimos lo siguiente,
#!/bin/sh
export PATH=/usr/local/bin:$PATH |
Lo guardamos con el nombre variables.sh, y lo instalamos en /etc/profile.d.
$ su -c "install -m755 variables.sh /etc/profile.d" |
Tenemos que cerrar el emulador de terminal y volverlo a abrir para que
la variable de entorno aplicada sea efectiva. Es conveniente guardar
una copia de este script para posteriores
instalaciones de nuestro sistema, teniendo en cuenta que es el que se
va a utilizar a partir de ahora en todos los manuales de esta web, para
establecer variables de entorno globales, excepto en aquellas que
sólo afectan al usuario, en las que se utilizará el
archivo de configuración personal, ~/.bashrc.
La ventaja de utilizar el directorio /etc/profile.d es que es común a todas las distribuciones y nos evita tener que editar otros archivos del sistema como por ejemplo, /etc/profile.
2) Desinstalar versiones anteriores del programa ubicadas en el directorio /usr
Aún en el caso de que la versión a compilar la vayamos a
instalar en el mismo directorio que la que proporciona la
distribución, siempre se debe desinstalar previamente la versión antigua, para evitar conflictos innecesarios.
Instalación
Dependencias
Herramientas de Compilación
Entre paréntesis la
versión con la que se ha compilado Polipo
para la elaboración de este documento.
* GCC - (8.1.0) o Clang - (6.0.0)
* Make - (4.2.1)
Descarga
polipo-1.1.1.tar.gz
Optimizaciones
$ export {C,CXX}FLAGS='-O3 -march=amdfam10 -mtune=amdfam10'
|
Donde pone amdfam10
se indica el procesador respectivo de cada sistema
seleccionándolo de la siguiente tabla: |
Nota informativa sobre las optimizaciones para GCC
|
* La opción '-march=' establece el procesador mínimo con el que funcionará el programa compilado, la opción '-mtune=' el procesador específico para el que será optimizado.
* Los valores separados por comas, son equivalentes, es decir, que lo mismo da poner '-march=k8' que '-march=athlon64'.
* En versiones de GCC 3.2 e inferiores se utiliza la opción '-mcpu=' en lugar de '-mtune='.
|
Nota informativa sobre las optimizaciones para Clang
|
* La opción '-mtune=' está soportada a partir de la versión 3.4 de Clang.
* Los valores de color azul no son compatibles con Clang.
* Las filas con el fondo de color amarillo son valores exclusivos de Clang y,
por lo tanto, no son aplicables con GCC.
|
Valores |
CPU |
Genéricos |
generic |
Produce un código
binario optimizado para la mayor parte de procesadores existentes.
Utilizar este valor si no sabemos el nombre del procesador que
tenemos en nuestro equipo. Este valor sólo es aplicable en
la opción '-mtune=', si utilizamos GCC. Esta opción está disponible a
partir de GCC 4.2. |
native |
Produce un código
binario optimizado para el procesador que tengamos en nuestro sistema,
siendo éste detectado utilizando la instrucción cpuid.
Procesadores antiguos pueden no ser detectados utilizando este valor.
Esta opción está disponible a
partir de GCC 4.2. |
x86-64 |
Procesador genérico con extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 1.9. |
Intel |
atom |
Intel Atom
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y
extensiones 64-bit. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición bonnell. |
bonnell |
Intel Bonnell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3 y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
broadwell |
Intel Broadwell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C, RDSEED, ADCX, PREFETCHW y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
cannonlake |
Intel Cannonlake Server con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, UMIP y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8 y Clang 3.9. |
core2 |
Intel Core2
con soporte de instrucciones MMX, SSE, SSE2, SSE3, SSSE3 y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.3. |
core-avx2 |
Intel Core (Haswell). Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición haswell. |
core-avx-i |
Intel Core (ivyBridge)
con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND, F16C y
extensiones 64-bit. Esta opción está disponible
desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición ivybridge. |
corei7 |
Intel Core i7 con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1 y SSE4.2 y extensiones 64-bit. Soporta también los procesadores Intel
Core i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición nehalem. |
corei7-avx |
Intel Core i7 con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL y
extensiones 64-bit. Soporta también los
procesadores Intel Core i3 e i5. Esta opción está disponible desde GCC 4.6, hasta GCC 4.8. A partir de GCC 4.9 se utiliza la definición sandybridge. |
goldmont |
Intel
Goldmont con soporte de instrucciones X87, MMX, SSE42, FXSR,
CMPXCHG16B, MOVBE, POPCNT, PCLMUL, AES, PRFCHW, SlowTwoMemOps, SlowLEA,
SlowIncDec, LAHFSAHF, MPX, SHA, RDRAND, RDSEED, XSAVE, XSAVEOPT,
XSAVEC, XSAVES, CLFLUSHOPT y FSGSBase. Esta opción está
disponible a partir de Clang 5. |
haswell |
Intel Haswell con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT,
AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2,
F16C y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
i386 |
Intel i386.
|
i486 |
Intel i486. |
i586, pentium |
Intel Pentium sin soporte de instrucciones MMX. |
i686 |
Produce un código binario optimizado para la mayor parte de
procesadores compatibles con la serie 80686 de Intel. Todos los actuales lo son. |
icelake |
Intel
Icelake con soporte de instrucciones X87, MMX, AVX, FXSR,
CMPXCHG16B, POPCNT, AES, PCLMUL, XSAVE, XSAVEOPT, LAHFSAHF, RDRAND,
F16C, FSGSBase, AVX2, BMI, BMI2, FMA, LZCNT, MOVBE, INVPCID, VMFUNC,
RTM, HLE, SlowIncDec, ADX, RDSEED, SMAP, MPX, XSAVEC, XSAVES, SGX,
CLFLUSHOPT, AVX512, CDI, DQI, BWI, VLX, PKU, PCOMMIT, CLWB, VBMI, IFMA,
SHA, BITALG, VAES, VBMI2, VNNI, VPCLMULQDQ, VPOPCNTDQ, GFNI, CLWB y
HasFastGather. Esta opción está disponible a partir
de Clang 6. |
icelake-client |
Intel Icelake Client con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI,
AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ,
VAES y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8. |
icelake-server |
Intel Icelake Server con soporte de instrucciones MOVBE, MMX, SSE,
SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL,
FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW,
CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ,
AVX512CD, AVX512VBMI, AVX512IFMA, SHA, CLWB, UMIP, RDPID, GFNI,
AVX512VBMI2, AVX512VPOPCNTDQ, AVX512BITALG, AVX512VNNI, VPCLMULQDQ,
VAES, PCONFIG, WBNOINVD y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8. |
intel |
Intel Haswell y Silvermont. Este valor sólo es aplicable en
la opción '-mtune='. Esta opción está disponible a partir
de GCC 4.9. |
ivybridge |
Intel Ivy Bridge con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
AES, PCLMUL, FSGSBASE, RDRND, F16C y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
knl |
Intel Knights Landing con soporte de instrucciones
MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2,
AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX,
PREFETCHW, AVX512F, AVX512PF, AVX512ER y extensiones 64-bit. Esta opción está disponible a partir
de GCC 5 y Clang 3.4. |
knm |
Intel Knights Mill con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, AVX512F,
AVX512PF, AVX512ER, AVX512CD, AVX5124VNNIW, AVX5124FMAPS,
AVX512VPOPCNTDQ y extensiones 64-bit. Esta opción está disponible a
partir de GCC 8. |
lakemont |
Intel Quark Lakemont MCU, basado en el procesador Intel Pentium. Esta opción está disponible a partir
de GCC 6 y Clang 3.9. |
nehalem |
Intel Nehalem con soporte de instrucciones MMX,
SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT y extensiones
64-bit. Esta opción está disponible a partir
de GCC 4.9. |
nocona |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2, SSE3 y extensiones 64-bit. |
penryn |
Intel
Penryn con soporte de instrucciones MMX, SSE, SSE2, SSE3,
SSSE3 y SSE4.1. |
pentiumpro |
Intel PentiumPro. |
pentium2 |
Intel Pentium2 basado en PentiumPro con soporte de instrucciones MMX. |
pentium3, pentium3m |
Intel Pentium3 basado en PentiumPro con soporte de instrucciones MMX y SSE. |
pentium4, pentium4m |
Intel Pentium4 con soporte de instrucciones MMX, SSE y SSE2. |
pentium-m |
Versión de bajo
consumo de Intel Pentium3 con soporte de instrucciones MMX, SSE y SSE2.
Utilizado por los portátiles Centrino. |
pentium-mmx |
Intel PentiumMMX basado en Pentium con soporte de instrucciones MMX. |
prescott |
Versión mejorada de Intel Pentium4 con soporte de instrucciones MMX, SSE, SSE2 y SSE3. |
sandybridge |
Intel Sandy Bridge con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX,
AES, PCLMUL y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
silvermont |
Intel Silvermont con soporte de instrucciones
MOVBE, MMX, SSE, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, POPCNT, AES, PCLMU, RDRND y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9 y Clang 3.6. |
skx |
Intel Skylake Server con soporte de instrucciones X87, MMX, AVX, FXSR, CMPXCHG16B, POPCNT, AES, PCLMUL, XSAVE, XSAVEOPT,
LAHFSAHF, RDRAND, F16C, FSGSBase, AVX2, BMI, BMI2, FMA, LZCNT, MOVBE,
INVPCID, VMFUNC, RTM, HLE, SlowIncDec, ADX, RDSEED, SMAP, MPX, XSAVEC,
XSAVES, SGX, CLFLUSHOPT, AVX512, CDI, DQI, BWI, VLX, PKU, PCOMMIT y CLWB. Esta opción está disponible a partir de Clang 3.5. A partir de Clang 3.9 se utiliza también la definición skylake-avx512. |
skylake |
Intel Skylake con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT,
XSAVEC, XSAVES y extensiones 64-bit. Esta opción está disponible a partir
de GCC 6 y Clang 3.6. |
skylake-avx512 |
Intel Skylake Server
con soporte de instrucciones MOVBE, MMX, SSE, SSE2,
SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE,
RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT,
XSAVEC, XSAVES, AVX512F, AVX512VL, AVX512BW, AVX512DQ, AVX512CD y
extensiones 64-bit. Esta opción está disponible a partir
de GCC 6 y Clang 3.9. |
slm |
Intel
Silvermont con soporte de instrucciones X87, MMX, SSE42, FXSR,
CMPXCHG16B, MOVBE, POPCNT, PCLMUL, AES, SlowDivide64, CallRegIndirect,
PRFCHW, SlowLEA, SlowIncDec, SlowBTMem y LAHFSAHF. Esta opción
está disponible a
partir de Clang 3.4. A partir de Clang 3.9 se utiliza también la definición silvermont. |
westmere |
Intel Westmere con soporte de instrucciones
MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AES,
PCLMUL y extensiones 64-bit. Esta opción está disponible a partir
de GCC 4.9. |
yonah |
Procesadores
basados en la microarquitectura de Pentium M, con soporte de
instrucciones MMX, SSE, SSE2 y SSE3. |
AMD |
amdfam10, barcelona |
Procesadores basados en
AMD Family 10h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, 3DNow!, enhanced 3DNow!, ABM y extensiones
64-bit). Esta opción está disponible a partir de GCC 4.3. La definición barcelona está disponible a partir de Clang 3.6. |
athlon, athlon-tbird |
AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y SSE prefetch. |
athlon4, athlon-xp, athlon-mp |
Versiones mejoradas de AMD Athlon con soporte de instrucciones MMX, 3DNow!, enhanced 3DNow! y full SSE. |
bdver1 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.7. |
bdver2 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (BMI, TBM, F16C, FMA, LWP, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.7. |
bdver3 |
Procesadores basados en
AMD Family 15h core con soporte de instrucciones x86-64 (FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE,
SSE2, SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM y extensiones
64-bit). Esta opción está disponible a partir
de GCC 4.8 y Clang 3.4. |
bdver4 |
Procesadores basados en AMD Family 15h core con soporte de instrucciones x86-64
(BMI, BMI2, TBM, F16C, FMA, FMA4, FSGSBASE, AVX, AVX2, XOP,
LWP, AES, PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM y extensiones 64-bit). Esta opción está
disponible a partir de GCC 4.9 y Clang 3.5. |
btver1 |
Procesadores basados en
AMD Family 14h core con soporte de instrucciones x86-64 (MMX, SSE,
SSE2, SSE3, SSE4A, CX16, ABM y extensiones 64-bit). Esta opción está disponible a partir
de GCC 4.6. |
btver2 |
Procesadores basados en
AMD Family 16h core con soporte de instrucciones x86-64 (MOVBE, F16C,
BMI, AVX, PCL_MUL, AES, SSE4.2, SSE4.1, CX16, ABM, SSE4A, SSSE3, SSE3,
SSE2, SSE, MMX y extensiones 64-bit). Esta opción
está disponible a partir
de GCC 4.8. |
geode |
AMD integrado con soporte de instrucciones MMX y 3DNow!. Esta opción está disponible a partir de GCC 4.3. |
k6 |
AMD K6 con soporte de instrucciones MMX. |
k6-2, k6-3 |
Versiones mejoradas de AMD K6 con soporte de instrucciones MMX y 3DNow!. |
k8, opteron, athlon64, athlon-fx |
Procesadores basados en
AMD K8 core con soporte de instrucciones x86-64 (MMX, SSE, SSE2,
3DNow!, enhanced 3DNow! y extensiones 64-bit). |
k8-sse3, opteron-sse3, athlon64-sse3 |
Versiones mejoradas de
AMD K8 core con soporte de instrucciones SSE3. Esta opción
está disponible a partir de GCC 4.3. |
znver1 |
Procesadores basados en
AMD Family 17h core con soporte de instrucciones x86-64 (BMI, BMI2,
F16C, FMA, FSGSBASE, AVX, AVX2, ADCX, RDSEED, MWAITX, SHA, CLZERO, AES,
PCL_MUL, CX16, MOVBE, MMX, SSE, SSE2, SSE3, SSE4A, SSSE3, SSE4.1,
SSE4.2, ABM, XSAVEC, XSAVES, CLFLUSHOPT, POPCNT y extensiones
64-bit). Esta opción está disponible a partir de GCC 6 y Clang 4. |
VIA |
c3 |
VIA C3 con soporte de instrucciones MMX y 3DNow! (no se implementa planificación para este chip). |
c3-2 |
VIA C3-2 (Nehemiah/C5XL) con soporte de instrucciones MMX y SSE (no se implementa planificación para este chip). |
c7 |
VIA C7 (Esther) con
soporte de instrucciones MMX, SSE, SSE2 y SSE (no se implementa
planificación para este chip). Esta opción
está disponible a partir de GCC 7. |
eden-x2 |
VIA Eden X2 con soporte de
instrucciones x86-64, MMX, SSE, SSE2 y SSE3 (no se implementa
planificación para este chip). Esta opción
está disponible a partir de GCC 7. |
eden-x4 |
VIA Eden X4 con soporte de
instrucciones MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX y AVX2
(no se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
esther |
VIA Eden Esther con
soporte de instrucciones MMX, SSE, SSE2 y SSE3 (no se implementa
planificación para este chip). Esta opción
está disponible a partir de GCC 7. |
nano |
VIA Nano genérico
con soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y SSSE3 (no
se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-1000 |
VIA Nano 1xxx con
soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y SSSE3 (no se
implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-2000 |
VIA Nano 2xxx con
soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y SSSE3 (no se
implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-3000 |
VIA Nano 3xxx con
soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3, SSSE3 y SSE4.1
(no se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-x2 |
VIA Nano Dual
Core con soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y
SSSE3 (no se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
nano-x4 |
VIA Nano Quad
Core con soporte de instrucciones x86-64, MMX, SSE, SSE2, SSE3 y
SSSE3 (no se implementa planificación para este chip). Esta
opción está disponible a partir de GCC 7. |
IDT |
winchip2 |
IDT Winchip2, que equivale a un i486 con soporte de instrucciones MMX y 3DNow!. |
winchip-c6 |
IDT Winchip C6, que equivale a un i486 con soporte de instrucciones MMX. |
Optimizaciones adicionales
Optimizaciones adicionales |
GCC |
Graphite
|
$ export {C,CXX}FLAGS+=' -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block'
|
LTO |
$ export {C,CXX}FLAGS+=' -fuse-linker-plugin -flto=2' |
Donde pone 2 se indica el número de núcleos de nuestro procesador, si sólo tiene uno, utilizar el parámetro -flto |
|
Clang |
Polly |
$ export {C,CXX}FLAGS+=' -O3 -mllvm -polly -mllvm -polly-vectorizer=stripmine' |
LTO |
$ export {C,CXX}FLAGS+=' -flto' |
ThinLTO |
$ export {C,CXX}FLAGS+=' -flto=thin' |
La aplicación de esta optimización es alternativa
a la tradicional LTO, a partir de Clang 3.9 y, por lo tanto, no es combinable con la misma. |
Parámetros adicionales
Parámetros adicionales de eliminación de avisos específicos en el proceso de compilación |
Clang |
$ export {C,CXX}FLAGS+=' -Qunused-arguments' |
Establecer la ruta de búsqueda de directorios de librerías en sistemas de 64 bits multiarquitectura |
$ export
LDFLAGS+=" -L/usr/lib64 -L/usr/local/lib64" |
Establecer el uso de enlazador dinámico para LLD |
$ export LDFLAGS+=' -fuse-ld=lld' |
Optimizaciones complementarias LTO de LLD |
$ export LDFLAGS+=' -Wl,--lto-partitions=2' |
Optimizaciones complementarias ThinLTO de LLD |
$ export LDFLAGS+=' -Wl,--thinlto-jobs=2' |
Donde pone 2
se indica el número de núcleos de nuestro procesador, si
sólo tiene uno, no es necesario añadir el parámetro en cuestión. |
Establecer la variable de entorno de uso de compilador para Clang |
$ export CC=clang CXX=clang++ |
Extracción
$ tar zxvf polipo-1.1.1.tar.gz
$ cd polipo-1.1.1
$ sed -e '15s:^:#:' -e '63s:=:+&:' -i Makefile
|
Explicación de los
comandos
sed -e '15s:^:#:' -e '63s:=:+&:' -i Makefile : Modificamos el archivo Makefile
para que el mismo acepte las variables de entorno de
optimización que hemos aplicado anteriormente. Y borramos las
predefinidas que trae por defecto este archivo.
Compilación
Parámetros de compilación opcionales
-j2
: Si tenemos un procesador de doble núcleo (dual-core), y el kernel
está optimizado para el mismo y es SMP, con este parámetro
aumentaremos el número de procesos de compilación
simultáneos a un nivel de 2 y aceleraremos el tiempo de compilación del programa de forma considerable.
-j4
: Lo mismo que arriba pero con procesadores de 4 núcleos (quad-core).
Instalación como root
$ su
# make install
# mkdir -p /var/cache/polipo
# mkdir -p /etc/polipo
# install -m644 *.sample /etc/polipo
# mv /etc/polipo/config{.sample,}
# mv /etc/polipo/forbidden{.sample,} |
Los valores por defecto que utiliza Polipo
son suficientes para garantizar un funcionamiento eficaz del proxy, la
edición del archivo de configuración es para casos
puntuales, como el uso con el programa de navegación
anónima: Tor,
o la utilización de un directorio de caché diferente al
predeterminado.
La edición del archivo de configuración del
sistema o el personal irá en función del usuario que
lance el programa, en mi caso es el root. Polipo tiene
una interfaz web que permite configurar en vivo las opciones del mismo,
pero esto lo explico más adelante. El archivo forbidden contiene la lista de direcciones que no queremos que cachee Polipo, su edición es muy fácil.
Crear el directorio de configuración personal (opcional)
$ mkdir -p ~/.polipo
$ cp -v /etc/polipo/* ~/.polipo
|
Estadísticas de Compilación e Instalación de Polipo
Estadísticas de Compilación e Instalación de Polipo |
CPU |
AMD Phenom(tm) II X4 965 Processor |
MHz |
3415.709 |
RAM |
4096 MB |
Sistema de archivos |
XFS |
Versión del Kernel |
4.16.15-ck1 SMP PREEMPT x86_64 |
Modo de frecuencia de la CPU |
ondemand |
Versión de Glibc |
2.27 |
Enlazador dinámico |
LLD 6.0.0 |
Compilador |
Clang 6.0.0 |
Parámetros de optimización |
-03 -march=amdfam10 -mtune=amdfam10 -mllvm -polly -mllvm -polly-vectorizer=stripmine -flto=thin |
Parámetros de compilación |
-j4 |
Tiempo de compilación |
5" |
Archivos instalados |
78 |
|
Ocupación de espacio en disco |
980 KB |
Consumo inicial de CPU y RAM de Fotoxx
Consumo inicial de CPU y RAM de Fotoxx |
Proceso
|
CPU |
Memoria física |
fotoxx |
0 % |
852 KB |
Directorio de configuración personal (opcional)
~/.polipo |
Es el directorio de configuración personal de Polipo en nuestro home. |
Directorio de la caché
/var/cache/polipo |
Es el directorio por defecto de la caché de Polipo. |
Desinstalación
como root
1)
MODO TRADICIONAL
Este programa no tiene soporte para desinstalación con el comando 'make uninstall'
2)
MODO MANUALINUX
El principal inconveniente del comando anterior es
que
tenemos que tener el directorio de compilación en nuestro
sistema para poder desinstalar el programa. En algunos casos esto
supone muchos megas de espacio en disco. Con el paquete de scripts que
pongo a continuación logramos evitar
el único inconveniente que tiene la compilación
de
programas, y es el tema de la desinstalación de los mismos
sin
la necesidad de tener obligatoriamente una copia de las fuentes
compiladas.
polipo-1.1.1-scripts.tar.gz
$ su
# tar zxvf polipo-1.1.1-scripts.tar.gz
# cd polipo-1.1.1-scripts
# ./Desinstalar_polipo-1.1.1 |
Copia de Seguridad
como root
Con este otro script creamos una copia de seguridad de los binarios
compilados, recreando la estructura de directorios de los mismos en un
directorio de copias de seguridad (copibin)
que se crea en el directorio /var. Cuando se haya creado el paquete comprimido de
los binarios podemos copiarlo como usuario a nuestro home
y borrar el que ha creado el script de respaldo, teniendo en cuenta que si queremos
volver a restaurar la copia, tendremos que volver a copiarlo al lugar
donde se ha creado.
$ su
# tar zxvf polipo-1.1.1-scripts.tar.gz
# cd polipo-1.1.1-scripts
# ./Respaldar_polipo-1.1.1 |
Restaurar la Copia de
Seguridad
como root
Y con este otro script (que se copia de forma automática
cuando
creamos la copia de respaldo del programa) restauramos la copia de
seguridad como root cuando resulte necesario.
$ su
# cd /var/copibin/restaurar_copias
# ./Restaurar_polipo-1.1.1
|
Configurar el inicio de Polipo
1) OpenMandriva y compatibles (Systemd)
Abrimos como root un editor de texto y añadimos lo siguiente:
#!/bin/sh
/usr/local/bin/polipo &
|
Lo guardamos con el nombre rc.local en el directorio /etc/rc.d, y posteriormente le damos permisos de ejecución.
$ su
# chmod +x /etc/rc.d/rc.local
|
Activamos el uso de este script de inicio en Systemd, y lo iniciamos para comprobar que funciona correctamente.
# ln -s /lib/systemd/system/rc-local.service /etc/systemd/system
# systemctl enable rc-local.service
# systemctl start rc-local-service
|
2) Slackware y derivados (SysVinit)
Abrimos como root el script /etc/rc.d/rc.local
y añadimos al final del mismo lo que está en
color rojo
#!/bin/sh
#
# /etc/rc.d/rc.local: Local system initialization script.
#
# Put any local startup commands in here. Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.
# To disable avahi, chmod rc.avahidaemon and rc.avahidnsconfd to 644
if [ -x /etc/rc.d/rc.avahidaemon -a -x /etc/rc.d/rc.avahidnsconfd ];
then
/etc/rc.d/rc.avahidaemon start
/etc/rc.d/rc.avahidnsconfd start
fi
# To disable networkmanager, chmod rc.networkmanager to 644
if [ -x /etc/rc.d/rc.networkmanager ]; then
. /etc/rc.d/rc.networkmanager start
fi
# Ufw
if [ -x /etc/init.d/ufw ]; then
/etc/init.d/ufw start
fi
/usr/local/bin/polipo &
|
3) Linux Mint Debian y compatibles (SysVinit)
Abrimos como root el script /etc/rc.local
y añadimos al final del mismo lo que está en
color rojo. Luego posteriormente, lo habilitamos con el
comando update-rc.d.
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/usr/local/bin/polipo &
exit 0
|
$ su
# update-rc.d -f rc.local start 99 2 3 4 5
|
También lo podemos iniciar desde terminal: polipo &
e incluso añadirlo a los scripts de inicio de los
administradores de ventanas, ejemplos hay de sobra en los manuales de éstos.
Configurar los clientes
Polipo utiliza por defecto la dirección localhost:8123
para la conexión al mismo, tendremos que configurar los
navegadores y los gestores de descargas como wget para poder usarlos
con Polipo. Recordar que solo hay que configurar la casilla HTTP Proxy.
1) Mozilla Firefox y Seamonkey
Aunque lo podemos configurar desde las preferencias del navegador, lo mejor es instalar la extensión MM3 Proxy Switch,
lo que nos permitirá desactivar el proxy en conexiones de acceso
mediante contraseña (por ejemplo, los foros) en el caso de que
dé problemas. Para añadirlo sólo
tendremos que hacerlo de la misma forma que se muestra en el ejemplo de la captura
de pantalla, con sólo hacer clic en el boton de la extensión
que se muestra en la parte inferior del navegador, activaremos y
desactivaremos el uso de Polipo.
Cuando está en color rojo el icono, éste está
activado.
Si tenemos más proxys configurados, desde el
menú de la extensión podremos seleccionar el indicado. La
forma de añadir los proxys es siempre la misma, el nombre del
proxy que se mostrará en el menú y los protocolos en los
que pretendemos utilizarlo con la dirección del mismo, y todo
esto entre corchetes, como se muestra a continuación.
[Polipo
http=127.0.0.1:8123
]
|
2) Links
En el navegador Links seleccionamos Configuración >> Opciones de red y en la casilla Proxy HTTP (máquina:puerto) añadimos localhost:8123
3) Dillo
Se explica en el capítulo 9 de la sección correspondiente del manual de Dillo.
4) Wget
Polipo mejora considerablemente la descarga de archivos con wget (sólo HTTP), editamos el archivo de configuración personal de wget en nuestro home: ~/.wgetrc, si no lo tenemos copiamos el del sistema, que se encuentra en /etc/wgetrc
$ cp /etc/wgetrc ~/.wgetrc
|
nos vamos a la línea 79 y añadimos lo que está en rojo.
# You can set the default proxies for Wget to use for http and ftp.
# They will override the value in the environment.
http_proxy = 127.0.0.1:8123
#ftp_proxy = http://proxy.yoyodyne.com:18023/
|
Para activar el proxy cada vez que lo deseemos, añadir la opción --proxy=on al comando de ejecución de la descarga, un ejemplo:
[jose@localhost descargas]$ wget -c --proxy=on http://www.desk9.com/Desk9Image/4_10/13B.JPG
--22:37:40-- http://www.desk9.com/Desk9Image/4_10/13B.JPG
=> `13B.JPG'
Connecting to 127.0.0.1:8123... conectado.
Petición Proxy enviada, esperando respuesta... 200 OK
Longitud: 347,429 (339K) [image/jpeg]
100%[====================================>]
347,429
3.72K/s ETA 00:00
22:39:26 (3.31 KB/s) - `13B.JPG' saved [347429/347429]
|
La opción -c
es la que permite continuar las descargas no completadas, yo la
añado siempre por defecto. Para más información
sobre Wget, su correspondiente manual.
Uso de Polipo con Tor y Privoxy
1) Uso de Polipo con Tor
Desde la últimas versiones, Polipo tiene soporte de navegación anónima de forma directa con Tor, lo podemos configurar al vuelo (solo para la sesión en curso) desde la interfaz web de Polipo
o añadirlo de forma permanente al archivo de
configuración, que quedaría así, en las
líneas 42 y 43 del mismo:
# Uncomment this if you want to use a parent SOCKS proxy:
socksParentProxy = "localhost:9050"
socksProxyType = socks5
|
2) Uso de Polipo con Tor+Privoxy
Si queremos utilizar Privoxy como filtro de publicidad junto con Tor, nos olvidamos de la configuración anterior y añadimos en el apartado correspondiente la dirección de Privoxy,
también lo podemos hacer en la interfaz web y también
podemos añadir cualquier proxy anónimo de tipo web,
editando la línea 37 del archivo de configuración.
# Uncomment this if you want to use a parent proxy:
parentProxy = "localhost:8118"
|
Iniciamos Polipo
Cuando tengamos Polipo ya en ejecución, para acceder a la interfaz web del mismo, escribimos la dirección http://localhost:8123 en el navegador, conveniente añadirlo a los marcadores para facilitar posteriores accesos.
Si hacemos clic en The Polipo Manual tendremos acceso a la documentación del programa (muy recomendable pegarle un vistazo) y haciendo clic en The Configuration interface y luego en Current configuration., nos saldrá la configuración de Polipo,
que en determinados apartados podremos modificar en tiempo real y desde
cualquier usuario, es decir, que si el programa lo está
ejecutando el root, aspectos como la navegación en modo desconectado o la utilización de proxys entre Polipo
e internet, podrán ser modificados por cualquier usuario
sólo para la sesión en curso de ejecución del
programa.
Controlar el tamaño de la caché de Polipo
Nada mejor que utilizar este script
para reducir el tamaño de la caché cuando ésta
llegue a superar el que tengamos previsto. En mi caso particular, lo
tengo fijado en 1,5 GB. El script lo que hace es borrar los archivos
mas antiguos que contenga la caché en función del acceso
por parte del proxy a éstos. Cuando lo descarguemos, lo instalamos como root en /usr/local/bin. La desinstalación y respaldo de este script viene incluida en los scripts del programa.
$ su
# mkdir -p /usr/local/bin
# install -m755 polipo_trimcache-0.2.py /usr/local/bin
|
Un ejemplo de uso, en el que se fija la caché en 500 MB
$ su
# polipo_trimcache-0.2.py -v /var/cache/polipo 500M
|
Si fueran GB, un ejemplo:
$ su
# polipo_trimcache-0.2.py -v /var/cache/polipo 1,5G
|
Para más información ejecutar polipo_trimcache-0.2.py --help
Por razones de seguridad el índice de la caché viene
desactivado por defecto, y los permisos de la misma se fijan a 700 para
los directorios y 600 para los archivos, es decir, sólo tiene
acceso el usuario que ejecuta Polipo.
Si queremos visualizar la caché a través del
índice de la interfaz web y la lista de servidores, tendremos
que descomentar lo siguiente en el archivo de configuración, en las líneas 84 y 85.
# Uncomment this if you want to enable the pages under /polipo/index?
# and /polipo/servers?. This is a serious privacy leak if your proxy
# is shared.
disableIndexing = false
disableServersList = false
|
Para desactivar el uso de la caché, es decir, Polipo
no almacenará ninguna página que visualicemos, basta
descomentar la línea 69 del archivo de configuración.
### On-disk data
### ************
# Uncomment this if you want to disable the on-disk cache:
diskCacheRoot = ""
|
Y si la queremos ubicar en otro directorio alternativo al predefinido,
editamos la línea 74 del archivo de configuración,
escribiendo la nueva ruta de ubicación de la misma. Esto es
útil si tenemos instaladas más de una distribución
y queremos utilizar un directorio caché compartido.
# Uncomment this if you want to put the on-disk cache in a
# non-standard location:
diskCacheRoot = "/mnt/slackware/polipo-cache"
|
Enlaces
http://www.pps.univ-paris-diderot.fr/~jch/software/polipo >> La web de Polipo.
|