понедельник, 10 сентября 2007 г.

nVidia nForce2 Ethernet Controller MAC 00:00:00:00:00:00, Linux и Udev

Обнаружилась проблема с MAC адресом встроенной сетевухи материнки Abit NF7 - он состоит их одних нулей что, понятное дело, недопустимо.

Проявилось под Linux'ом это так: после очередной перезагрузки номер сетевого интерфейса соответствующего карте увеличивался на единицу - т.е. особо при загрузке интерфейсы не поподнимаешь.

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

В /etc/udev/rules.d/ я создал новый файл, который назвал 71-persistent-net.rules (В каталоге уже был файл 70-persistent-net.rules, в котором и содержалась немеряная куча правил о присвоении больной сетевухе новых интерфейсов, а также запись о моей второй карточке. Инфу о второй карточке оставил - остальное удалил.) и добавил в него строку:
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{device}=="0x0066", NAME="eth0"
Это означает, что если есть сетевое устройство, под него есть драйвера и оно имеет ID 0x0066, то нужно привязать его к eth0.

Узнать ID можно так:
> cat /sys/class/net/eth{Номер интерфейса в данный момент}/device/device

например:
> cat /sys/class/net/eth12/device/device

По поводу правил udev - читаем man udev

понедельник, 18 июня 2007 г.

XSP под Windows и домашняя папка с не латинскими символами

В XSP сегодня обнаружилась проблема:
Если логин пользователя содержит не латинские символы, то и его домашняя папка тоже будет называться соответственно.

В папке типа
%USERPROFILE%\Local Settings\Temp\%USERNAME%-temp-aspnet-0\%хеш?%\
лежат сборки страничек с именами вроде %хеш?%.dll

У меня пользователь имел логин 'Тестер', файловая система FAT32 (мне кажется, что это может иметь значение).

По умолчанию для чтения строки пути используется кодировка utf8, и XSP показывает нам исключение, например:
Compiler failed to produce the assembly. Stderr='', Stdout='[Invalid UTF-8]
Cannot determine the text encoding for argument 5 (/out:C:\Documents and Settings\\xd2\xe5\xf1\xf2\xe5\xf0\Local Settings\Temp\\xd2\xe5\xf1\xf2\xe5\xf0-temp-aspnet-0\ced5b792\14fbad89.dll).
Please add the correct encoding to MONO_EXTERNAL_ENCODINGS and try again.

Из сообщения об ошибке видно, что с русскими буквами в пути проблема.
Причем сборки в ожидаемом каталоге действительно не появлялось, хотя подпапки создавались.
Поискав варианты наткнулся на возможность такой настройки переменной среды (выкрутасы с конкретными кодировками мне не помогли):
MONO_EXTERNAL_ENCODINGS=default_locale
и действительно, сборка стала происходить, но появилась другая проблема - сборка не загружается:
Could not load file or assembly 'C:\Documents and Settings\Тестер\Local Settings\Temp\Тестер-temp-aspnet-0\ced5b792\3bc07a97.dll' or one of its dependencies. The system cannot find the file specified.

А при пользователе по-английски - все работает!
Поиск решения продолжается....

вторник, 12 июня 2007 г.

ASP.NET под MONO - XMLCalendar

Нашел статью про простенькое кроссплатформенное .NET приложение http://www.devx.com/dotnet/Article/21872/, которое автор написал специально для демонстрации.
Под XSP у меня оно не заработало - стояла версия Mono 1.2.4.

Перечислю изменения, которые я внес в код:
1. В Global.asax и WebForm1.aspx:
Атрибута директивы Page Codebehind заменен на CodeFile
Вот цитата из MSDN: В Visual Studio атрибут Codebehind ссылается на имя файла, содержащего класс страницы. Этот атрибут используется только конструктором Visual Studio. Он сообщает конструктору, где найти класс страницы; конструктор создает экземпляр для работы пользователя с этим классом. Этот атрибут не используется во время выполнения.
Видимо, т.к. Mono 1.2.4 заявляет поддержку ASP 2.0, то и Codebehind был упразднен (как и в MS ASP.NET 2.0).
2. В соответствии с нововведениями ASP.NET 2.0 объявляем классы WebForm1 и Global частичными (partial).
3. В WebForm1.aspx.cs закоментированы строки объявления элементов управления - т.к. в противном случае, используя частичные классы мы получили бы повторное объявление.
//protected System.Web.UI.WebControls.DataGrid DataGrid1;
//protected System.Web.UI.WebControls.Calendar Calendar1;
//protected System.Web.UI.WebControls.Label Label2;

...Запуск... Все работает!
Исходники можно скачать по ссылке вверху.