LINUX.ORG.RU

Сообщения dimorphus

 

установка ngix в wheezy из стандартных репозиториев

Решил попробовать debian. Поставил wheezy. Насколько я понимаю, в стандартных репозиториях должен быть ngix. По краней мере, так следует из ссылки https://packages.debian.org/wheezy/nginx
Но ни aptitude search, ни apt-cache search его не видят. Соответственно, при попытке установки ничего не устанавливается.

Конфигурация:

$cat /etc/os-release

PRETTY_NAME="Debian GNU/Linux 7 (wheezy)"
NAME="Debian GNU/Linux"
VERSION_ID="7"
VERSION="7 (wheezy)"
ID=debian
ANSI_COLOR="1;31"
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support/"
BUG_REPORT_URL="http://bugs.debian.org/"
$cat /etc/apt/sources.list

deb http://mirror.yandex.ru/debian/ wheezy main non-free contrib
deb-src http://mirror.yandex.ru/debian/ wheezy main non-free contrib

deb http://mirror.yandex.ru/debian/ wheezy-updates main contrib non-free
deb-src http://mirror.yandex.ru/debian/ wheezy-updates main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free

Пробовал http://ftp.ru.debian.org/debian вместо yandex. Не помогло.
Вопрос: есть ли ngix в репах wheezy на самом деле и если есть, то где может быть ошибка в моей конфигурации?

 , ,

dimorphus
()

Чем определяется количество свободных irq линий?

Есть модуль для тестирования наличия свободных irq линий (http://pastebin.com/jCneWU6P). Функционирует через can_request_irq (или же просто через request_irq).

На одной машине выдаёт, что свобоных линий дофига и больше (http://pastebin.com/ed6mxemG).
На другой, что их очень мало (http://pastebin.com/1XhkxvJa).

Какими конфигурационными опциями, параметрами ядра определяется количество свободных irq линий?

 ,

dimorphus
()

[git] Поддержка патча для разных версий софта

Допустим я хочу написать патч для ядра. Допустим, что этот патч должен работать начиная от 32 версии до последней стабильной. Соответственно, последовательность действий следующая:

git checkout v2.6.32
git checkout -b my_branch
vim ...
git commit -a -m 'my patch'

Соответственно, вопрос: Каким образом мне необходимо сделать слияния чтобы в каждой версии ядра с 2.6.32 по 3.2 присутствовал мой патч (во всех версиях разный из-за конфликтов)? Проблема в том, что ifdef'ами для разных версии ядра в одном патче обойтись не удаётся.

 

dimorphus
()

[Bash] Quoting and escaping

Есть пример:

#!/bin/bash -x

action ()
{
   eval "${@:4}"
}

act ()
{
   action 0 2 2 "$@"
}


func ()
{
   pushd "$1"
   eval "$2"
   eval "$3"
   popd
}

act func /tmp/ "ls -Al > temp.txt" "cp -fv ./temp.txt $HOME"
act echo OK
act "{ echo OK1; echo OK2; }"

И он не работает. Знаю, что можно заставить его работать как надо, если заменить строки
 "ls -Al > temp.txt", "cp -fv ./temp.txt $HOME" на "'ls -Al > temp.txt'", "'cp -fv ./temp.txt $HOME'".
Но это похоже на хак, а не решение проблемы.
Вопрос заключается в том, есть ли выработанными десятилетиями упорного труда программерской мысли подход к решению таких ситуаций?

 

dimorphus
()

CMake

Что необходимо добавить в CMakeLists.txt, дабы в сгенерированном Makefile была цель из которой вызывается bash скрипт?
То есть, в Makefile добавилось бы нечто-вроде:

build: cmake_check_build_system
    $(shell /home/user/workspace/project/tools/deployment/scripts/build.sh -T -V -H -i)
.PHONY : build

Это не прокатывает:

add_custom_target(build ALL
    COMMAND "${CMAKE_SOURCE_DIR}/tools/deployment/scripts/build.sh"
    ARGS -T -H -V -i
    )

dimorphus
()

[bash] Как вывести stdout на экран, при этом stderr присвоить переменной

Есть команды:

var=$( ( echo stdout; echo sdterr 1>&2; ) )

Необходимо чтобы на экране отобразилось stdout, а в переменной содержалось stderr. Сейчас происходит ровно наоборот. Естественно, то, что во внутренних скобочках, предполагается держать неизменным.

Очень не хотелось бы иметь дело с созданием временного файла, а без него, как нечто-подобное провернуть, не знаю.

 

dimorphus
()

sed

Пытаюсь добавить столько же пробелов в пустую строку, сколько и у предыдущей перед текстом. Не получается.

sed -e 's%\([[:blank:]]*\)\(.*\)\n[[:blank:]]*$%\1\2/n\1%'
dimorphus
()

[emacs] autopair: пробелы между скобками

Как сделать, чтобы при набирании ( отображалось не (|), а ( | ). Желательно, чтобы при пустых скобках пробелы автоматически исчезали. При переформатировании региона, соответственно, тоже добавлялись пробелы в не пустые скобки.

 

dimorphus
()

[C] Инициализация рекурсивных структур на этапе компиляции

Есть структура:

typedef struct txt_stat
{
	wchar_t ch;
	double freq;
	struct txt_stat **txt;
	size_t tsize;
} txt_stat_t;
Поле txt указывает на массив указателей ( размера tsize ) на txt_stat_t.

На основе собранной статистики хочется вшить струкуту в исходник.
Пример:


const struct txt_stat lang_table_ru = 
{
	.ch = L'\0',
	.freq = 0.0,
	.tsize = 2,

	.txt = ( txt_stat_t *[2] ) {
		( txt_stat_t [1] ) {
			.ch = L'а',
			.freq = 0.5,
			.tsize = 1,

			.txt = {
				{
					.ch = L'б',
					.freq = 1.0,
					.tsize = 0,

					.txt = NULL
				} 
			}
		},
		( txt_stat_t [1] ) {
			.ch = L'б',
			.freq = 0.5,
			.tsize = 0,

			.txt = NULL
		} 
	}
};

Пример, соответственно, gcc не компилирует.

Вопрос: Возможна ли инициализация рекурсивной структуры на этапе компиляции ( где в примере ошибка )?

 

dimorphus
()

[C] Проблема с towlower и кодировками.

Есть файл в UTF-8 с русскими буквами. В исходнике он открывается, содержимое перекодируется в UCS-4 ( для того, чтобы можно было работать с wide char функциями ), все символы переводятся в нижний регистр, содержимое перекодируется назад UTF-8 ( без этого выводятся вопросики ) и выводится на экран.

Проблема: Символы не переводятся в нижний регистр.

#include <stdio.h>
#include <locale.h>
#include <wchar.h>
#include <wctype.h>
#include <errno.h>
#include <iconv.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

static int
convert( const char *from, const char *to,
		char * const input, size_t isize,
		char **output )
{
#define OUTBUF_SIZE 1024
	int err = -1;
	
	iconv_t idesc = iconv_open( to, from );
	if ( idesc == ( iconv_t ) -1 )
	{
		return -1;
	}

	char *out = NULL;
	char *outptr = NULL;
	char *in = input;
	size_t buflen = 0;
	size_t outmaxlen = 0;
	
	while ( isize > 0 ) {
		int n;
		
		/* Increase the buffer.  */
		char *new_outp = ( char * ) realloc( out, outmaxlen + OUTBUF_SIZE );
		if ( new_outp == NULL )
		{
			free( out );
			goto out1;
		}
		
		outptr = ( outptr - out ) + new_outp;
		
		out = new_outp;
		outmaxlen += OUTBUF_SIZE;
		
		buflen = OUTBUF_SIZE;
		
		n = iconv( idesc, &in, &isize, &outptr, &buflen );
		
		if ( n == ( size_t ) -1 && errno != E2BIG )
		{
			free( out );
			goto out1;
		}
		
	}
	
	err = 0;
	
	*output = out;
	
out1:	
	iconv_close( idesc );
out:
	return err;
#undef OUTBUF_SIZE
}

static void
wcslwr( wchar_t * const str )
{
	size_t i;
	const int len = wcslen( str );
	
	for( i = 0; i < len; ++i ) {
		str[i] = towlower( str[i] );
	}
}

int
main( int argc, char *argv[] )
{
	char *input;
	char *input_name;
	char *tmp;
	wchar_t *nstr;
	struct stat sb;
	int err = EXIT_FAILURE;
	
	if ( argc == 1 )
	{
		return 0;
	}
	
	setlocale( LC_ALL, "" );
	
	//printf( "%s\n", setlocale( LC_ALL, NULL )  );
	
	input_name = argv[1];
	int fdi;
	
	fdi = open( input_name, O_RDONLY );
	
	if ( fdi == -1 )
	{
		perror("open");
		exit( EXIT_FAILURE );
	}

	if ( fstat( fdi, &sb ) == -1 )
	{
		perror( "fstat" );
		goto out1;
	}
	
	size_t fisize = sb.st_size;
	
	input = ( char * )
			mmap( NULL, fisize, PROT_READ, MAP_PRIVATE, fdi, 0 );
	if ( input == NULL )
	{
		perror( "mmap" );
		goto out1;
	}
	
	if ( convert( "UTF-8", "UCS-4", input, fisize, &tmp ) ) {
		perror( "convert" );
		goto out2;
	}
	
	nstr = ( wchar_t * ) tmp;
	
	wcslwr( nstr );
	
	convert( "UCS-4", "UTF-8", ( char * ) nstr, wcslen( nstr ) * sizeof( wchar_t ), &tmp );
	
	int val = fwide( stdout, 0 );
	if ( val == 0 ) {
		if ( fwide( stdout, 1 ) <= 0 ) {
			printf( "%s\n", "Could not switch to wide char mode!" );
			goto out3;
		} else {
			wprintf( L"%s\n", ( wchar_t * ) tmp );
		}	
	} else if ( val > 0 ) {
		wprintf( L"%s\n", ( wchar_t * ) tmp );
	} else {
		printf( "%s\n", "Could not switch to wide char mode!" );
		goto out3;
	}
	
	err = EXIT_SUCCESS;
	
out3:
	free( nstr );
	free( tmp );
out2:
	munmap( input, fisize );
out1:
	close( fdi );
	
	exit( err );
}

Пример работы:

dimorphus@codifier ~/workspace/decode/test $ cat ./test.txt 
АБВГДеежз
ABCDefgdimorphus@codifier ~/workspace/decode/test $ ./a.out ./test.txt 
АБВГДеежз
ABCDefg

Примечание1:

dimorphus@codifier ~/workspace/decode/test $ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=C
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Примечание2:
На мой взгляд в функциях wprintf нужно использовать L"%ls\n", но в таком случае выводятся вопросики.

Вопрос:
Как заставить работать ( переводить в нижний регистр и выводить на экран буквы )?
[Если кто знает] Как подружить gdb и wchar_t (не только английский алфавит) ? [/Если кто знает]

 

dimorphus
()

[kernel dev] Отключение/Подключение AP ядер процессора

Необходимо сначала отключить все ядра процессора, кроме загрузочного, после, соответственно, включить.

Подозреваю, что это можно сделать функциями:
Сразу для всех:

int disable_nonboot_cpus(void);
void enable_nonboot_cpus(void);

или же поотдельности:

int cpu_down(unsigned int cpu);
int cpu_up(unsigned int cpu);

Последнии используются при записи 0/1 в /sys/devices/system/cpu/cpu#/online.

Проблема заключается в том, что при попытке скомпилировать следующий тестовый модуль, появляются warning' и, из-за которых я не могу его загрузить в ядро:

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/cpu.h>

static int __init
init( void )
{
        return disable_nonboot_cpus();
}

static void __exit
uninit( void )
{
        enable_nonboot_cpus();
}

module_init( init );
module_exit( uninit );

MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("TEST");

make -C /lib/modules/2.6.33.5-124.relkin.fc13.x86_64/build M=/home/relkin/modules modules
make[1]: Entering directory `/usr/src/kernels/2.6.33.5-124.relkin.fc13.x86_64'
  CC [M]  /home/relkin/modules/test.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "disable_nonboot_cpus" [/home/relkin/modules/test.ko] undefined!
WARNING: "enable_nonboot_cpus" [/home/relkin/modules/test.ko] undefined!
  CC      /home/relkin/modules/test.mod.o
  LD [M]  /home/relkin/modules/test.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.33.5-124.relkin.fc13.x86_64'

Ядро собрано в нужной конфигурации.

Если использовать отдельно функцию cpu_down, то всё работает, но если в модуле есть cpu_up, то опять появляется warning.

Мне кажется, что дело может быть в объявлениях __cpuinit или __ref, но точно я не знаю, т. к. не знаю зачем они нужны.

dimorphus
()

Физически смежные страницы памяти, userspace

Возможно ли, используя userspace программу разместить файл в физически смежных страницах памяти? Или же необходимо сначала скопировать файл в память, затем через /proc или /dev сообщать модулю ядра адреса и после вызывать copy_from_user?

dimorphus
()

RSS подписка на новые темы