From 71943d0d5fb2d29748a228c11f67d49cc8c39b91 Mon Sep 17 00:00:00 2001 From: fauno Date: Wed, 26 Apr 2017 12:07:00 -0300 Subject: calibre: 2.83.0 --- libre/calibre/PKGBUILD | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/libre/calibre/PKGBUILD b/libre/calibre/PKGBUILD index 00aa67f40..29fae591f 100644 --- a/libre/calibre/PKGBUILD +++ b/libre/calibre/PKGBUILD @@ -10,8 +10,8 @@ # Contributor: Márcio Silva pkgname=calibre -pkgver=2.82.0 -pkgrel=1.parabola2 +pkgver=2.83.0 +pkgrel=2.parabola1 pkgdesc="Ebook management application, without nonfree decompression engine for RAR archives" arch=('i686' 'x86_64' 'armv7h') url="https://calibre-ebook.com/" @@ -23,7 +23,7 @@ depends=('python2-six' 'python2-dateutil' 'python2-cssutils' 'python2-cherrypy' 'python2-pyqt5' 'python2-psutil' 'icu' 'libmtp' 'python2-dbus' 'python2-netifaces' 'python2-cssselect' 'python2-apsw' 'qt5-webkit' 'qt5-svg' 'python2-chardet' 'python2-pygments' 'mtdev' - 'desktop-file-utils' 'gtk-update-icon-cache' 'optipng' 'udisks2' 'mesa') + 'desktop-file-utils' 'gtk-update-icon-cache' 'optipng' 'udisks2') makedepends=('qt5-x11extras' 'xdg-utils') optdepends=('ipython2: to use calibre-debug' 'poppler: required for converting pdf to html' @@ -31,17 +31,11 @@ optdepends=('ipython2: to use calibre-debug' replaces=($pkgname-libre) conflicts=($pkgname-libre) mksource=("http://download.$pkgname-ebook.com/${pkgver}/$pkgname-${pkgver}.tar.xz" - "https://calibre-ebook.com/signatures/${pkgname}-${pkgver}.tar.xz.sig") -source=("https://repo.parabola.nu/other/${pkgname}-libre/${pkgname}-libre-${pkgver}.tar.xz" - 'libre.patch' - '0001-Remove-new_version_notification.patch' - '0001-Remove-code-that-contacts-calibre-servers-to-check-u.patch') -mksha256sums=('137995abe467fcb951c1d42583305ebec7b8ca403c44895e70f82a2d6156711c' - 'SKIP') -sha256sums=('4da07053bddca0c49c3bf315397f3f1dff319f74e63e8a961c3906e0eca4eb7d' - '9d57abfff30e0b02128aa32ee41e095ab9f16b52c358fda68b3cae3ab8b485b9' - '26bfd44cd360df3aff927c4834e1622fb16a89169a8cce4f68ea19b87e9e867b' - 'bed99658f2545ec3112710d72a70b30ffaeddd03c12d51cfc2ee0972d2697e8b') + "https://calibre-ebook.com/signatures/${pkgname}-${pkgver}.tar.xz.sig" + 'libre.patch' + '0001-Remove-new_version_notification.patch' + '0001-Remove-code-that-contacts-calibre-servers-to-check-u.patch') +source=("https://repo.parabola.nu/other/${pkgname}-libre/${pkgname}-libre-${pkgver}.tar.xz"{,.sig}) validpgpkeys=('3CE1780F78DD88DF45194FD706BC317B515ACE7C') mksource(){ @@ -49,10 +43,6 @@ mksource(){ # Remove nonfree unRAR utility files from the source rm -rv src/unrar -} - -prepare(){ - cd "${pkgname}-${pkgver}" # Remove nonfree rar/cbr support and references rm -v src/calibre/{ebooks/metadata/rar.py,utils/unrar.{cpp,py}} @@ -61,6 +51,10 @@ prepare(){ patch -Np1 -i "${srcdir}/libre.patch" patch -Np1 -i "${srcdir}/0001-Remove-new_version_notification.patch" patch -Np1 -i "${srcdir}/0001-Remove-code-that-contacts-calibre-servers-to-check-u.patch" +} + +prepare(){ + cd "${pkgname}-${pkgver}" # Remove unneeded files and libs # FIXME: remove html5lib too, but the latest html5lib breaks calibre. And calibre -- cgit v1.2.3 From cf761c6b82f3d8ebc258b305ca5d7215b5108a7a Mon Sep 17 00:00:00 2001 From: fauno Date: Wed, 26 Apr 2017 13:56:17 -0300 Subject: rspamd --- pcr/libfann/PKGBUILD | 33 +++++++++++++++++++ pcr/rspamd/PKGBUILD | 81 +++++++++++++++++++++++++++++++++-------------- pcr/rspamd/rspamd.install | 16 +++------- pcr/rspamd/rspamd.sysuser | 1 + pcr/rspamd/rspamd.tmpfile | 2 ++ 5 files changed, 98 insertions(+), 35 deletions(-) create mode 100644 pcr/libfann/PKGBUILD create mode 100644 pcr/rspamd/rspamd.sysuser create mode 100644 pcr/rspamd/rspamd.tmpfile diff --git a/pcr/libfann/PKGBUILD b/pcr/libfann/PKGBUILD new file mode 100644 index 000000000..6a8882596 --- /dev/null +++ b/pcr/libfann/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Oleksandr Natalenko aka post-factum +_origname=fann +pkgname=lib${_origname} +_fullrev=d71d54788bee56ba4cf7522801270152da5209d7 +_rev=d71d54788 +pkgver=2.2.0.${_rev} +pkgrel=3 +pkgdesc="Fast Artificial Neural Network Library" +url="https://github.com/${pkgname}/${_origname}" +arch=('i686' 'x86_64') +license=('LGPLv2.1') +depends=('glibc') +makedepends=('git' 'gcc' 'cmake' 'make' 'coreutils') +source=(${pkgname}-${pkgver}.zip::https://github.com/${pkgname}/${_origname}/archive/${_fullrev}.zip) + +sha256sums=('a456c8703de30734317549ba26e7c574f56edbc7964d23f3ffe0bcd51c3297d6') + +build() { + cd "${srcdir}/${_origname}-${_fullrev}" + + mkdir -p build + cd build + cmake -DCMAKE_INSTALL_PREFIX=${pkgdir}/usr .. + + make -j$(nproc) +} + +package() { + cd "${srcdir}/${_origname}-${_fullrev}/build" + + make install +} + diff --git a/pcr/rspamd/PKGBUILD b/pcr/rspamd/PKGBUILD index 02b8df02a..ba53e5b2f 100644 --- a/pcr/rspamd/PKGBUILD +++ b/pcr/rspamd/PKGBUILD @@ -2,60 +2,90 @@ # Former maintainer: Andrew Lewis # Maintainer (Parabola): fauno pkgname=rspamd -pkgver=1.2.8 +pkgver=1.5.6 pkgrel=1 epoch= pkgdesc="Fast and free spam filtering system." arch=('x86_64' 'i686' 'mips64el') -url="http://rspamd.com" +url="https://rspamd.com" license=('Apache') -depends=('libevent' 'glib2' 'gmime' 'luajit' 'sqlite' 'hiredis' - 'jemalloc' 'pcre2') -makedepends=('cmake' 'pkgconfig') +depends=('libevent' 'glib2' 'gmime' 'lua' 'sqlite' 'lua-lpeg' 'libfann' 'gd' + 'jemalloc' 'hiredis' 'pcre2') +makedepends=('cmake' 'pkgconfig' 'ragel') backup=('etc/rspamd/2tld.inc' 'etc/rspamd/common.conf' 'etc/rspamd/composites.conf' 'etc/rspamd/dmarc_whitelist.inc' 'etc/rspamd/logging.inc' + 'etc/rspamd/maillist.inc' 'etc/rspamd/metrics.conf' + 'etc/rspamd/mid.inc' 'etc/rspamd/mime_types.inc' 'etc/rspamd/modules.conf' - 'etc/rspamd/options.inc' - 'etc/rspamd/rspamd.conf' - 'etc/rspamd/rspamd.systemd.conf' - 'etc/rspamd/rspamd.sysvinit.conf' - 'etc/rspamd/spf_dkim_whitelist.inc' - 'etc/rspamd/statistic.conf' - 'etc/rspamd/surbl-whitelist.inc' - 'etc/rspamd/worker-controller.inc' - 'etc/rspamd/worker-normal.inc' + 'etc/rspamd/modules.d/antivirus.conf' + 'etc/rspamd/modules.d/asn.conf' 'etc/rspamd/modules.d/chartable.conf' + 'etc/rspamd/modules.d/clickhouse.conf' + 'etc/rspamd/modules.d/dcc.conf' 'etc/rspamd/modules.d/dkim.conf' + 'etc/rspamd/modules.d/dkim_signing.conf' 'etc/rspamd/modules.d/dmarc.conf' 'etc/rspamd/modules.d/emails.conf' + 'etc/rspamd/modules.d/fann_redis.conf' + 'etc/rspamd/modules.d/force_actions.conf' 'etc/rspamd/modules.d/forged_recipients.conf' 'etc/rspamd/modules.d/fuzzy_check.conf' + 'etc/rspamd/modules.d/greylist.conf' 'etc/rspamd/modules.d/hfilter.conf' + 'etc/rspamd/modules.d/history_redis.conf' 'etc/rspamd/modules.d/ip_score.conf' 'etc/rspamd/modules.d/maillist.conf' + 'etc/rspamd/modules.d/metadata_exporter.conf' + 'etc/rspamd/modules.d/metric_exporter.conf' + 'etc/rspamd/modules.d/mid.conf' 'etc/rspamd/modules.d/mime_types.conf' 'etc/rspamd/modules.d/multimap.conf' + 'etc/rspamd/modules.d/mx_check.conf' 'etc/rspamd/modules.d/once_received.conf' 'etc/rspamd/modules.d/phishing.conf' 'etc/rspamd/modules.d/ratelimit.conf' 'etc/rspamd/modules.d/rbl.conf' + 'etc/rspamd/modules.d/redis.conf' 'etc/rspamd/modules.d/regexp.conf' + 'etc/rspamd/modules.d/replies.conf' + 'etc/rspamd/modules.d/rmilter_headers.conf' 'etc/rspamd/modules.d/rspamd_update.conf' + 'etc/rspamd/modules.d/spamassassin.conf' 'etc/rspamd/modules.d/spf.conf' 'etc/rspamd/modules.d/surbl.conf' - 'etc/rspamd/modules.d/whitelist.conf') + 'etc/rspamd/modules.d/trie.conf' + 'etc/rspamd/modules.d/url_redirector.conf' + 'etc/rspamd/modules.d/url_reputation.conf' + 'etc/rspamd/modules.d/url_tags.conf' + 'etc/rspamd/modules.d/whitelist.conf' + 'etc/rspamd/options.inc' + 'etc/rspamd/redirectors.inc' + 'etc/rspamd/rspamd.conf' + 'etc/rspamd/rspamd.systemd.conf' + 'etc/rspamd/rspamd.sysvinit.conf' + 'etc/rspamd/spf_dkim_whitelist.inc' + 'etc/rspamd/statistic.conf' + 'etc/rspamd/surbl-whitelist.inc' + 'etc/rspamd/worker-controller.inc' + 'etc/rspamd/worker-fuzzy.inc' + 'etc/rspamd/worker-normal.inc') -install=rspamd.install +install="rspamd.install" -source=("https://www.rspamd.com/downloads/${pkgname}-${pkgver}.tar.xz") +source=("https://www.rspamd.com/downloads/${pkgname}-${pkgver}.tar.xz" + "${pkgname}.tmpfile" + "${pkgname}.sysuser" + ) -sha256sums=('485438d8c38ada1a6e95c9ea1298d2c899d4ec618f1dd5f539663522c506eb2b') +sha256sums=('cda2a5b93f0e57b890767514ce00a2660baf9d48627f7367a36fe938ade14f31' + 'f89edae5436a3c14e58210fb5c1d5bdd2f8a6f98c03dbc150ea9ff1a3fcfe441' + '59646874a5036f3f26cac2898a2f60713fe6147b3c60ee964494f07b6acc313f') prepare() { cd "${srcdir}/${pkgname}-${pkgver}" @@ -75,11 +105,11 @@ build() { -DRSPAMD_USER='_rspamd' \ -DDBDIR=/var/lib/rspamd \ -DWANT_SYSTEMD_UNITS=ON \ - -DENABLE_HIREDIS=ON \ - -DENABLE_SYSTEM_HIREDIS=ON \ - -DENABLE_PCRE2=ON \ - -DENABLE_JEMALLOC=ON \ - -DINSTALL_WEBUI=ON \ + -DENABLE_HIREDIS=ON \ + -DENABLE_SYSTEM_HIREDIS=ON \ + -DENABLE_PCRE2=ON \ + -DENABLE_JEMALLOC=ON \ + -DINSTALL_WEBUI=ON \ . make -j$(nproc) @@ -88,5 +118,10 @@ build() { package() { cd "${srcdir}/${pkgname}-${pkgver}" make DESTDIR="${pkgdir}/" install + + install -Dm0644 "LICENSE" "${pkgdir}/usr/share/${pkgname}/LICENSE" + install -Dm0644 "../${pkgname}.tmpfile" "${pkgdir}/usr/lib/tmpfiles.d/${pkgname}.conf" + install -Dm0644 "../${pkgname}.sysuser" "${pkgdir}/usr/lib/sysusers.d/${pkgname}.conf" } +# vim: set tabstop=4:softtabstop=4:shiftwidth=4:noexpandtab diff --git a/pcr/rspamd/rspamd.install b/pcr/rspamd/rspamd.install index 2261599e8..705c21dbe 100644 --- a/pcr/rspamd/rspamd.install +++ b/pcr/rspamd/rspamd.install @@ -1,20 +1,12 @@ ## arg 1: the new package version post_install() { - if ! getent passwd _rspamd >/dev/null; then - useradd -k /dev/null -r -m -c 'rspam daemon' -d /var/lib/rspamd -s /sbin/nologin _rspamd - passwd -l _rspamd >/dev/null - fi - mkdir -p /var/log/rspamd - mkdir -p /run/rspamd - chown _rspamd:_rspamd /var/log/rspamd - chown _rspamd:_rspamd /run/rspamd + systemd-sysusers rspamd.conf + systemd-tmpfiles --create rspamd.conf } ## arg 1: the old package version post_remove() { - if getent passwd _rspamd >/dev/null; then - userdel _rspamd - fi + true } -# vim:set ts=2 sw=2 et: +# vim: set tabstop=4:softtabstop=4:shiftwidth=4:noexpandtab diff --git a/pcr/rspamd/rspamd.sysuser b/pcr/rspamd/rspamd.sysuser new file mode 100644 index 000000000..0beda9439 --- /dev/null +++ b/pcr/rspamd/rspamd.sysuser @@ -0,0 +1 @@ +u _rspamd /var/lib/rspamd "rspam daemon" /var/lib/rspamd diff --git a/pcr/rspamd/rspamd.tmpfile b/pcr/rspamd/rspamd.tmpfile new file mode 100644 index 000000000..3fe6e9ad0 --- /dev/null +++ b/pcr/rspamd/rspamd.tmpfile @@ -0,0 +1,2 @@ +d /run/rspamd 0755 _rspamd _rspamd - +d /var/log/rspamd 0755 _rspamd _rspamd - -- cgit v1.2.3 From 5d358aa79c56d2c5765b5b41d5bbbb62ee6cc273 Mon Sep 17 00:00:00 2001 From: fauno Date: Wed, 26 Apr 2017 14:16:26 -0300 Subject: rmilter: 1.10.0 --- pcr/rmilter/PKGBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pcr/rmilter/PKGBUILD b/pcr/rmilter/PKGBUILD index 98906b32c..55a3d0bfc 100644 --- a/pcr/rmilter/PKGBUILD +++ b/pcr/rmilter/PKGBUILD @@ -1,13 +1,13 @@ # Maintainer: Oleksandr Natalenko # Maintainer (Parabola): fauno pkgname=rmilter -pkgver=1.8.6 +pkgver=1.10.0 pkgrel=1 epoch= pkgdesc="Another sendmail milter for different mail checks." arch=('x86_64' 'i686') url="http://rspamd.com" -license=('custom:BSD') +license=('custom:BSD2') depends=('openssl' 'pcre' 'libmilter' 'opendkim') makedepends=('cmake' 'pkgconfig' 'bison' 'flex') @@ -17,7 +17,7 @@ install=rmilter.install source=("${pkgname}-${pkgver}.tar.gz::https://codeload.github.com/vstakhov/${pkgname}/tar.gz/${pkgver}") -sha256sums=('dd00e10a6c5e2a7682bd81155f8cb09fbdbed0416e1c7ccc955a4338c85f144f') +sha256sums=('ea80563fa7636afed0b5fd9a29aa2300f15793ed85788e4ce69c187d341a7d54') build() { cd "${srcdir}/${pkgname}-${pkgver}" -- cgit v1.2.3 From bfa41cc99d7b265b64e95bd58bb233af7361653a Mon Sep 17 00:00:00 2001 From: fauno Date: Wed, 26 Apr 2017 16:45:21 -0300 Subject: calibre: correct patches --- ...-that-contacts-calibre-servers-to-check-u.patch | 37 +++++-------------- libre/calibre/PKGBUILD | 7 ++++ libre/calibre/libre.patch | 41 +++++++++++----------- 3 files changed, 37 insertions(+), 48 deletions(-) diff --git a/libre/calibre/0001-Remove-code-that-contacts-calibre-servers-to-check-u.patch b/libre/calibre/0001-Remove-code-that-contacts-calibre-servers-to-check-u.patch index 2b9a51f57..9610b29f8 100644 --- a/libre/calibre/0001-Remove-code-that-contacts-calibre-servers-to-check-u.patch +++ b/libre/calibre/0001-Remove-code-that-contacts-calibre-servers-to-check-u.patch @@ -1,7 +1,5 @@ -diff --git a/src/calibre/gui2/update.py b/src/calibre/gui2/update.py -index 3e294cac3..580f736ef 100644 ---- a/src/calibre/gui2/update.py -+++ b/src/calibre/gui2/update.py +--- calibre-2.83.0/src/calibre/gui2/update.py.orig 2017-04-26 14:55:30.824093338 -0300 ++++ calibre-2.83.0/src/calibre/gui2/update.py 2017-04-26 15:00:09.807495982 -0300 @@ -1,19 +1,17 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' @@ -27,7 +25,7 @@ index 3e294cac3..580f736ef 100644 from calibre.gui2.dialogs.plugin_updater import get_plugin_updates_available URL = 'https://code.calibre-ebook.com/latest' -@@ -30,35 +28,7 @@ def get_download_url(): +@@ -30,35 +28,7 @@ def get_newest_version(): @@ -64,7 +62,7 @@ index 3e294cac3..580f736ef 100644 class Signal(QObject): -@@ -81,12 +51,6 @@ class CheckForUpdates(Thread): +@@ -81,12 +51,6 @@ calibre_update_version = NO_CALIBRE_UPDATE plugins_update_found = 0 try: @@ -77,35 +75,18 @@ index 3e294cac3..580f736ef 100644 update_plugins = get_plugin_updates_available(raise_error=True) if update_plugins is not None: plugins_update_found = len(update_plugins) -@@ -200,22 +164,15 @@ class UpdateMixin(object): +@@ -193,13 +157,7 @@ self.status_bar.update_label.setText(msg) self.status_bar.update_label.setVisible(True) - if has_calibre_update: -- if (force or (config.get('new_version_notification') and -- dynamic.get('update to version %s'%calibre_version, True))): +- if force: - if not no_show_popup: - self._update_notification__ = UpdateNotification(calibre_version, - number_of_plugin_updates, parent=self) - self._update_notification__.show() - elif has_plugin_updates: -- if force: -- from calibre.gui2.dialogs.plugin_updater import (PluginUpdaterDialog, -- FILTER_UPDATE_AVAILABLE) -- d = PluginUpdaterDialog(self, -- initial_filter=FILTER_UPDATE_AVAILABLE) -- d.exec_() -- if d.do_restart: -- self.quit(restart=True) + if has_plugin_updates: -+ if force: -+ from calibre.gui2.dialogs.plugin_updater import (PluginUpdaterDialog, -+ FILTER_UPDATE_AVAILABLE) -+ d = PluginUpdaterDialog(self, -+ initial_filter=FILTER_UPDATE_AVAILABLE) -+ d.exec_() -+ if d.do_restart: -+ self.quit(restart=True) - - def plugin_update_found(self, number_of_updates): - # Change the plugin icon to indicate there are updates available + if force: + from calibre.gui2.dialogs.plugin_updater import (PluginUpdaterDialog, + FILTER_UPDATE_AVAILABLE) diff --git a/libre/calibre/PKGBUILD b/libre/calibre/PKGBUILD index 29fae591f..de610dbbf 100644 --- a/libre/calibre/PKGBUILD +++ b/libre/calibre/PKGBUILD @@ -36,6 +36,13 @@ mksource=("http://download.$pkgname-ebook.com/${pkgver}/$pkgname-${pkgver}.tar.x '0001-Remove-new_version_notification.patch' '0001-Remove-code-that-contacts-calibre-servers-to-check-u.patch') source=("https://repo.parabola.nu/other/${pkgname}-libre/${pkgname}-libre-${pkgver}.tar.xz"{,.sig}) +mksha512sums=('a28aa52379bc317e648087b28859a8e2c50dd4e2ccb3352e135f896ad95ab9c85c1fba162fe3acd5056be80e7c4e9481ea1396cb638661cfdb27795051124821' + 'SKIP' + '14800a1895fd8a5e942e282688081c607730e866e825df53918c49d973ae3e6eb78a5d48354b6e1cf58953e8e0cf9ca030e9278ec296f8de222c9bd8b2945bf4' + 'd95ea4e9911b62d466c2a590746c2a42c38834988bd505df7a0af3a76bde9d273f0ada405eb12ef0506da0a098d31adabe5b1b44acd23db8349ffd233d1c1b1d' + 'f81c2f269399a44763ca77a5ceb4031ea0efd06e87b7c0e3a34cbf5765b0ee35ba66373a3d721bdfc947085994066cca77546bada2c39a6cbb5a4743a5c4fa04') +sha512sums=('cd1a2aea95e5d0b4f3ddf7a75e45da6076e1e3c56619dce38bbce4fb2533e792a663f7a8754e894da6ff5943349e375c58c0b11ac1f7b7f81e4a7c05de507423' + 'SKIP') validpgpkeys=('3CE1780F78DD88DF45194FD706BC317B515ACE7C') mksource(){ diff --git a/libre/calibre/libre.patch b/libre/calibre/libre.patch index ace7034e3..739322d7a 100644 --- a/libre/calibre/libre.patch +++ b/libre/calibre/libre.patch @@ -1,23 +1,3 @@ -diff --git a/resources/images.qrc b/resources/images.qrc -index c52874b78..2fee5e138 100644 ---- a/resources/images.qrc -+++ b/resources/images.qrc -@@ -197,8 +197,6 @@ - images/mimetypes/svg.png - images/mimetypes/odt.png - images/mimetypes/epub.png --images/mimetypes/cbr.png --images/mimetypes/rar.png - images/mimetypes/tpz.png - images/mimetypes/djvu.png - images/mimetypes/computer.png -@@ -218,4 +216,4 @@ - images/mimetypes/html.png - images/mimetypes/lrx.png - -- -\ No newline at end of file -+ diff --git a/resources/mime.types b/resources/mime.types index b8acaaa25..9ea4742a6 100644 --- a/resources/mime.types @@ -705,3 +685,24 @@ index fc85e1b7a..87b62caf3 100644 msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:51 +--- calibre-2.83.0/resources/images.qrc.orig 2017-04-13 00:02:36.000000000 -0300 ++++ calibre-2.83.0/resources/images.qrc 2017-04-26 14:52:54.508461078 -0300 +@@ -183,11 +183,9 @@ + images/mimetypes/html.png + images/mimetypes/xps.png + images/mimetypes/svg.png +-images/mimetypes/cbr.png + images/mimetypes/tpz.png + images/mimetypes/snb.png + images/mimetypes/png.png +-images/mimetypes/rar.png + images/mimetypes/mobi.png + images/mimetypes/gif.png + images/mimetypes/pdf.png +@@ -218,4 +216,4 @@ + images/plugins/plugin_updater_updates.png + images/plugins/plugin_upgrade_valid.png + +- +\ No hay ningún carácter de nueva línea al final del fichero ++ -- cgit v1.2.3