LINUX.ORG.RU

Сообщения grem

 

Двойное условие в скрипте bash

 

Допустим, я хочу проверить вывод какой-то команды на принимаемые значения, но делать что-то только в случае, если условия не выполняются. То есть мне нужно «успешно» завершить работу функции, если выполненная в ней команда вернула «0» или «2». Следующий код не работает (даже если ret = 0 или 2, то вываливает ошибку):

...
ret=$?

if [ "$ret" != "0" ] || [ "$ret" != "2" ]; then
   echo "FAIL"
fi

При использовании круглых скобок вроде отрабатывает, но ругается, что не найдена команда «0» или «2».

Или нужно обязательно городить такое:

...
ret=$?

if [ "$ret" != "0" ]; then
    :
elif [ "$ret" != "2" ]; then
    :
else
    echo "FAIL"
fi

?

grem
()

Gentoo: cтабилизация профиля amd64 17.1

 

ВАЖНО!
Перед переключением на профиль amd64 17.1 внимательно прочтите новость и выполните приведённые там инструкции

Сам переход на новый профиль связан с удалением симлинков /usr/lib и /lib.

Все пользователи gentoo и так знают, что подобные новости распространяются средствами portage (eselect news), но вдруг кто сразу решит переключить, не глядя.

grem
()

Gentoo и ccache

 , ,

Кто-нибудь может поделиться настройками для использования ccache в portage? Как ни пытаюсь настроить использование (для определённого пакета), на этапе установки всё равно пытается создать /root/.ccache или что-то записать туда и вываливается с ошибкой.

Ещё зачем-то создаёт каталог /var/tmp/portage/.ccache со своим конфигом при этом

grem
()

Использование NAS и Datasets

 , ,

Правильно ли я понимаю, что в отличии от OpenMediaVault (да и обвязки от QNAP, например), где создаются обычные каталоги, размер каждого из которых ограничен доступным местом, FreeNAS и NAS4Free оперируют только так называемыми Datasets, которые всегда фиксированного размера после создания?

И правильно ли я понял, что в отличии от NAS4Free, использование одного устройства для системы и хранения не предполагается? Или это всё же возможно после последующей манипуляции с разделами, как в случае с OMV? OMV при установке забирает себе весь диск, но после с помощью gparted и последующей правки uuid для swap, можно исправить ситуацию.

Только создалось впечатление, что gparted не очень то дружит с zfs, поэтому подобные манипуляции там с ним проблематичны.

grem
()

Gentoo python_target_python3_6

 , ,

Что случилось с профилями? Только вчера обновлялся и дефолтным стал python3_6, сегодня мне обратно предлагают пересобрать всё с python3_5? Я могу, конечно, вручную прописать новый, но чего он у них туда сюда вдруг скачет?

grem
()

Подсветка синтаксиса Fortran

 , ,

Добавьте, пожалуйста, подсветку синтаксиса языка Fortran в теге [code]. Используемый highlight.js его поддерживает посредством alias «fortran».

maxcom

grem
()

Fortran 2003: user-defined io в GCC

 , fortran 2003, ,

Как известно, в GCC-7.1.0 появилась поддержка «user-defined io» стандарта Fortran 2003. На сайте Intel есть несколько примеров. С большинством из которых всё понятно и они даже собираются gfortran-7.3.0 и работают.

Проблема наблюдается с третьим примером:

! PROGRAM: udio_nml_read_write.f90
!
! This program tests NAMELIST READ and WRITE.  In the WRITE subroutine, there
! are FORMATTED WRITES as well as NAMELIST WRITES.
!
MODULE UDIO
  TYPE MYDT
     INTEGER F1
     INTEGER F2
   CONTAINS
     PROCEDURE :: MYSUBROUTINE
     GENERIC :: READ (FORMATTED) => MYSUBROUTINE
  END TYPE MYDT

  INTERFACE WRITE (FORMATTED)
     MODULE PROCEDURE :: WRITESUBROUTINE
  END INTERFACE
CONTAINS

  SUBROUTINE WRITESUBROUTINE (DTV, UNIT, IOTYPE, V_LIST, IOSTAT, IOMSG)
    CLASS (MYDT),       INTENT(IN)      :: DTV
    INTEGER*4,          INTENT(IN)      :: UNIT
    CHARACTER (LEN=*),  INTENT(IN)      :: IOTYPE
    INTEGER,            INTENT(IN)      :: V_LIST(:)
    INTEGER*4,          INTENT(OUT)     :: IOSTAT
    CHARACTER (LEN=*),  INTENT(INOUT)   :: IOMSG
 
    INTEGER I, J
    NAMELIST /SUBRT_NML/ I, J
 
    I=DTV%F1
    J=DTV%F2
 
    WRITE (UNIT, '(A,2I5.2)', IOSTAT=IOSTAT) IOTYPE, DTV%F1, DTV%F2
    WRITE (UNIT, NML=SUBRT_NML)
  END SUBROUTINE WRITESUBROUTINE
 
SUBROUTINE MYSUBROUTINE (DTV, UNIT, IOTYPE, V_LIST, IOSTAT, IOMSG)
    CLASS (MYDT),       INTENT(INOUT)   :: DTV
    INTEGER*4,          INTENT(IN)      :: UNIT
    CHARACTER (LEN=*),  INTENT(IN)      :: IOTYPE
    INTEGER,            INTENT(IN)      :: V_LIST(:)
    INTEGER*4,          INTENT(OUT)     :: IOSTAT
    CHARACTER (LEN=*),  INTENT(INOUT)   :: IOMSG
 
! X and Y are aliases for DTV%F1 and DTV%F2 since field references
! cannot be referenced in a NAMELIST statement
 
    INTEGER X, Y
    NAMELIST /SUBRT_NML/ X, Y
 
    READ (UNIT, *) DTV%F1, DTV%F2
 
    X = DTV%F1
    Y = DTV%F2
 
    READ (UNIT, NML=SUBRT_NML, IOSTAT=IOSTAT)
  
END SUBROUTINE MYSUBROUTINE

END MODULE UDIO

PROGRAM UDIO_PROGRAM
   USE UDIO
   TYPE (MYDT) :: MYDTV
   INTEGER        :: A, B
   NAMELIST /MAIN_NML/ A, MYDTV, B

   OPEN (10, FILE='udio_nml_read_write.in')
   READ (10, NML=MAIN_NML)
   WRITE (6, NML=MAIN_NML)
   CLOSE (10)
 
END PROGRAM UDIO_PROGRAM

На вход подаётся файл «'udio_nml_read_write.in»:
&MAIN_NML
A=100
MYDTV=20 30
&SUBRT_NML
X=20
Y=30
/
/B=200
/

На выходе должно быть:
&MAIN_NML
 A       =         100,
 MYDTV=NAMELIST   20   30
&SUBRT_NML
 I       =          20,
 J       =          30
/
 /B       =         200
/

Но с gcc-7.3.0 на выходе получается
&MAIN_NML
 A=        100,
 MYDTV=NAMELIST   20   30&SUBRT_NML
 I=         20,
 J=         30,
 /
 B=          0,
 /

, либо вместо «B = 0» может быть произвольное число, то есть словно «B» осталась неинициализированной.

Если во входном файле вместо строки " /B = 200" оставить только «B = 200» и добавить в конце пустую строку, то тогда в выводе будет «B = 200».

Но интересует первоначальный вариант входного файла (если он правильный, конечно).

Есть ли кто, из тех у кого есть intel fortran compiler (2016 и новее, кажется), проверить что выводит пример в результате отработки?
И главное, как этот пример вообще работает? Пока я это не очень понимаю. То есть, например, не совсем понятно как он считывает значения «20» и «30» второй раз и куда? И куда он считывает остальной текст или там во входных данных уже какой-то стандартный «текстовый шаблон» вбит и он его подставляет? Если что-то в «текстовых строках» поменять, то во время исполнения пример упадёт. А если поменять значения «X» и «Y», то они ни на что не влияют (на вывод, то есть словно они и не нужны).

grem
()

Проверка существования директории средствами autotools

 , , ,

Никак не могу найти, есть ли возможность средствами при написании файла конфигурации для autoconf проверить существует ли в подкаталогах исходников определённая директория?

Есть макрос AC_CHECK_FILE, но из его описания

Check whether file file exists on the native system

следует, что проверять он будет в самой системе. Или это будет работать и для относительных путей,в том числе внутри sandbox?

Мне это нужно для проверки наличия директории и если она есть (может и не быть), то пропатчить лежащие внутри файлы Makefile.am (вызовом внешнего скрипта - но искать нужно не скрипт), и использовать их для сборки этого «плагина».

grem
()

Плагины в CodeBlocks для разработки на Fortran

 , ,

В связи с тем, что в Gentoo обновили Code::Blocks до версии 17.12 и там был добавлен USE-флаг «fortran», активирующий сборку FortraProject plugin отдельно от остальных «contrib» плагинов (если этот плагин есть ещё в каком дистрибутиве linux, буду рад об этом узнать), то я хотел бы уточнить опытных разработчиков на Фортране, какие основные плагины в Code::Blocks вы используете в процессе разработки?

В первую очередь приходит мысль о SmartIndent(Fortran). Насколько актуальны в использовании остальные, например, Doxygen? Спрашиваю потому, что на основе беглого взгляда мне показалось, что наибольшая часть этих плагинов нужна для разработки на C++.

grem
()

Переменная LINGUAS в make.conf перестала применяться

 ,

Буквально несколько часов назад выполнил eix-sync и при выводе списка пакетов для обновления portage мне сообщил, что пакеты, которые были собраны с русскоязычной локализацией будут пересобраны с флагом "-linguas_ru".

В make.conf всё так же прописано

LINGUAS="en ru ru_RU"
L10N="${LINGUAS}"

, что вроде бы должно соответсовать этой старой новости:

https://gentoo.org/support/news-items/2016-06-23-l10n-use_expand.html

и до сегодняшней ночи всё было нормально.

Pinkbyte, не подскажешь, может я новость какую пропустил и снова что-от поменяли? Как раз недавно закончил пересобирать мир с профилем 2017.0.

grem
()

Регулряное выражение для удаления номера версии.

 ,

Есть, например, такой вывод

# genlop -ln | grep dpi
     Tue Jul 18 13:38:56 2017 >>> media-fonts/font-bh-75dpi-1.0.3
     Tue Jul 18 13:42:19 2017 >>> media-fonts/font-bitstream-75dpi-1.0.3
     Tue Jul 18 13:42:53 2017 >>> media-fonts/font-adobe-100dpi-1.0.3
     Tue Jul 18 13:43:08 2017 >>> media-fonts/font-bh-lucidatypewriter-100dpi-1.0.3
     Tue Jul 18 13:43:46 2017 >>> media-fonts/font-adobe-utopia-75dpi-1.0.4
     Tue Jul 18 13:47:10 2017 >>> media-fonts/font-bitstream-100dpi-1.0.3
...

Для удаления данных о дате и номере версии в конце для пакетов отличных от шрифтов, меня вполне устраивает такое регулярное выражение

sed -e 's/^.*> //' | sed s/-[0-9].*$//g

, но в случае вышеуказанных пакетов отрезаются и нужные мне "-75dpi", "-100dpi".

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

Как подправить регулярку sed s/-[0-9].*$//g так, чтобы она удаляла подстроку после "-", содержащую цифры, но при этом не трогала подстроку, содержащую подстроку «dpi»?

grem
()

Вертикальная полоса прокрутки в [code] в Opera

 ,

Что-то поменяли в коде движка LOR? Почему-то в Opera (в Chrome, Firefox такого не вижу) примерно с сегодняшнего дня при отображении блока code отображается вертикальная полоса прокрутки в нём. Просто отображается, прокручивать никуда не даёт, так как блок помещается весь.

Проверял с отключёнными скриптами и дополнениями, то есть они не влияют.

grem
()

Кнопка «закрыть» у Opera без заголовка и границ окна в KDE5

 , ,

Есть 2 системы с Gentoo и KDE5 практически идентичны и с одинаковой версией Opera (одна из низ в VirtualBox). В обоих системах для приложения Opera в свойствах окна для «приложения» настроено скрытие заголовка окна и его границ. В системе с VirtualBox при разворачивании окна браузера во весь экран в верхнем правом углу появляется мелкая кнопка «закрыть», во второй системе она не появляется.

Кто нибудь сталкивался с подобным? От чего зависит появление такой кнопки?

Перемещено leave из development

grem
()

Расширения, которых больше не будет с выходом Firefox 57

 ,

Каких полезных расширений лишатся пользователи, с полным переходом Firefox на расширения основанные на WebExtensions и чем их можно заменить?

Из тех, что (иногда) использовал я:

P.S.
Да они издеваются!

Устали от обновления плагинов? Firefox обеспечит вашу безопасность.

grem
()

Plasma 5.11.0

 ,

Вышла 10 октября: https://www.kde.org/announcements/plasma-5.11.0.php

Из заметных новшеств - они опять изменили systemsettings и что-то там про wayland с dpi на разных мониторах.

grem
()

«Странное» поведение std::cout.setf (на самом деле нет)

 ,

Столкнулся с одной проблемой, но пока писал сюда, разобрался.

Сегодня запустил в Linux ранее написанную небольшую утилитку (писал в Windows с использовванием MinGW64). При это заметил, что вывод результата крайне странный: результат функции класса почему-то выводится в «hex». Сначала решил, что может чего намудрил внутри функции, но в ней число вычислялось нормально. Методом «научного» тыка выяснил, что проблема связана с std::cout.setf, так как в процессе вывода данных я, в зависимости от потребностей, меняю формат вывода.

Набросал небольшой пример, который демонстрирует проблему:

#include <iostream>

/* g++ -Wall -std=c++11 ./main.cpp  */

int main() {

    double test_d = -0.0010532140082682021;

    std::cout.setf(std::ios::scientific);
    std::cout << "test_d = " << test_d << std::endl;
    
    std::cout.setf(std::ios::fixed);
    std::cout << "test_d = " << test_d << std::endl;

return 0;
}

Можно и без -std=c++11, результат вывода тот же:

test_d = -1.053214e-03
test_d = -0x1.1417fee28283fp-10

вместо второго числа ожидается -0.001053.

Ну так вот, как оказалось, просто переключиться на fixed формат недостаточно, так как scientific при это не отключается, а в сочетании с ним, результат будет выводиться в HEX (http://en.cppreference.com/w/cpp/io/ios_base/setf):

scientific - generate floating point types using scientific notation, 
or hex notation if combined with fixed: see std::scientific

то есть перед вызовом std::cout.setf(std::ios::fixed) нужно сначала вызвать

std::cout.unsetf(std::ios::scientific);

Осталось понять, почему в MinGW64 (не помню какой версии), работает иначе.

grem
()

GENTOO_MIRRORS и локальный каталог

 , ,

man make.conf

GENTOO_MIRRORS = [URIs] Insert your space-separated list of local mirrors here. These locations are used to download files before the ones listed in the ebuild scripts. Merging 'mirrorse‐ lect' can help. Entries in this variable that have no protocol and simply start with a '/' path separator may be used to specify mounted filesystem mirrors.

поэтому, казалось бы, GENTOO_MIRRORS=«/mnt/dist» должно работать, но к этой директории при скачивании пакетов даже не обращается.

Есть, конечно, PORTAGE_RO_DISTDIRS, но почему тот то способ не работает сейчас? Сейчас, потому, что когда-то я его использовал, но не могу вспомнить точно как прописывал.

grem
()

XnViewMP 0.87 (ebuild для Gentoo)

 , , , ,

7 сентября 2017 года вышел сабж (и как самостоятельное приложение XnConvert для конвертрования). Так как многие уже здесь жаловались, что kipi-plugins превратились в нечто бесполезное, потянув за собой gwenview, то я не выдержал и подправил существующие в оверлеях ebuild-файлы, чтобы они наконец-то были в каком-то виде «рабочими». Надеюсь, что это скорее так, чем нет. По крайней мере, теперь оба приложения у меня запускаются после установки как со встроенными библиотеками, так и с внешними.

Тэг gentoo добавлен по той, причине, что прошу желающих дополнительно потестить ebuild'ы. Как смог, я это уже сделал. При использовании внешних библиотек для проигрывания медиа-контента наличие библиотеки libpulse.so мне не понадобилось, но вот со встроенными, он её требует, поэтому и пришлось добавить дополнительную зависимость от pulseaudio/apulse.

XnViewMP

XnConvert

Pinkbyte, можешь подсказать, как подправить первый ebuild, чтобы в зависимости от платформы создавался симлинк на libpulse.so из соответствующих платформе каталогов?

И как всё-таки лучше поступить, когда приложение может захотеть в рантайме плагины gstreamer, но и без них работает? Не запихивать же в зависимости все gst-plugins-*? Я пока ограничился elog сообщением, что пользователю нужно будет их доустановить нужные ему.

grem
()

Fedora {24,25} получение url для скачиваемых пакетов.

 ,

Подскажите, как в Fedora 24 или 25 получить ссылки на скачиваемые пакеты? Есть ли для них yumdownloader. В CentOS 7 им вполне можно было обойтись. В указанных версиях Fedora в dnf-plugins-core плагинах dnf download не имеет опции "--url". Насколько я понял, эта опция появилась с 26-й версии. о_О

grem
()

Linux Mint 18.2

 

Обновили «встроенный» софт и добавили в него новые фичи. Исошки вышли сразу для «веток» Cinnamon (3.4), Mate, KDE, XFCE.

https://www.linuxmint.com/rel_sonya_cinnamon_whatsnew.php

grem
()