Notes about IT

Позднее Ctrl + ↑

Перемещение пользовательских баз данных

SQL Server позволяет переносить в новое место файлы данных, журнала и полнотекстового каталога пользовательской базы данных. Новое место указывается при помощи предложения FILENAME инструкции ALTER DATABASE. Этот метод подходит для перемещения файлов базы данных в пределах одного экземпляра SQL Server. Для переноса базы данных на другой экземпляр SQL Server или другой сервер применяются операции резервного копирования и восстановления или отключения и подключения.

Статья целиком на microsoft.com«>Статья целиком на microsoft.com

2017   sql   windows

Repeater Bridge на DD-WRT

Необходим был интернет в удалении от кабеля, а в наличии wifi-карточки нет и покупать не хотелось. Хорошо, что у меня лежит неиспользуемый D-Link Dir-615 ревизии E4 на котором вместо оригинальной прошивки залита прошивка DD-WRT.

Недолго гугля нашел решение на официальной вики DD-WRT.
В моем случае в роли первого/первичного роутера выступает Apple AirPort Express, а вторым — D-Link DIR-615.

Для создания моста между двумя роутерами первый должен быть в режиме AP с включенным DHCP. Второй роутер должен работать на прошивке DD-WRT для настройки Repeater Bridge.

Вся работа ведется на втором роутере

  1. Сбрасываем в заводские настройки.
  2. Выставляем на компьютере статический IP адрес, например, 192.168.1.10.
  3. Либо подключаем патч-кордом, либо подключаемся к wifi сети с SSID dd-wrt.
  4. Открываем в браузере адрес http://192.168.1.1 Новые версии DD-WRT требуют установить пароль перед тем как продолжить.
  5. Открываем вкладку Wireless -> Basic Settings:
    В блоке Physical Interface:
  • Wireless Mode: Repeater Bridge;
  • Wireless Network Mode: Must Match Primary Router;
  • Wireless Network Name(SSID): Такой же как и на первом роутере;
  • Wireless Channel: Такой же как и на первом роутере;
  • Wireless SSID Broadcast: Enable;
  • Network Configuration: Bridged;
  • Жмем Save.
    В блоке Virtual Interfaces:
  • Add — Wireless Network Name(SSID): отличный от первого;
  • Wireless SSID Broadcast: Enable;
  • AP Isolation: Disable;
  • Network Configuration: Bridge;
  • Жмем Save.
  1. Открываем вкладку Wireless -> Wireless Security:
    В блоке Physical Interface:
  • Security Mode: Must Match Primary Router and DD-wrt only works reliably with WEP or WPA2-AES;
  • WPA Algorithms: Must Match Primary Router;
  • WPA Shared Key: Must Match Primary Router;
  • Key Renewal Interval (in seconds): Leave default.
    В блоке Virtual Interfaces (если вы не видите эту секцию — обновите DD-WRT):
  • Security Mode: Must Match Physical Interface;
  • WPA Algorithms: Must Match Physical Interface;
  • WPA Shared Key: Must Match Physical Interface;
  • Key Renewal Interval (in seconds): Leave default;
  • Жмем Save.
    dd-wrt-01-1.png
  1. Открываем вкладку Setup -> Basic Setup:
  • Connection Type will be: Disabled;
  • Выставите STP в Disabled (Enabled иногда может быть причиной проблем);
  • IP Address: 10.0.1.50 (первичный роутер имеет IP-адрес 10.0.1.1);
  • Mask: 255.255.255.0 Gateway: 10.0.1.1 (первичный роутер имеет IP-адрес 10.0.1.1);
  • DHCP Server: Disable Local DNS: 10.0.1.1 (IP-адрес первичного роутера 10.0.1.1);
  • Assign WAN Port to Switch: enable (позволяет использовать WAN порт как обычный LAN порт);
  • Жмем Save.
  1. Авторизовываемся на новом IP-адресе http://10.0.1.50 (не забыв сменить адрес на компьютере!).
  2. Открываем вкладку Setup -> Advanced Routing:
  • Выставить Operating mode в Router;
  • Жмем Save.
  1. Открываем Services:
  • Отключаем Dnsmasq;
  • Жмем Save.
  1. Открываем вкладку Security -> Firewall:
  • Снимаем все галочки кроме Filter Multicast;
  • Отключаем SPI firewall;
  • Жмем APPLY Settings.
  1. Перезагружаем роутер.
  2. Как только авторизовываемся на роутере ищем на вкладку Security и устанавливаем тот же тип безопасности и пароль от SSID, что и на первом роутере. Не рекомендуется устанавливать WPA2 Personal MIXED, т. к. этот режим может вызывать проблемы и лучше выставить WPA2 Personal.
  3. Верните сетевые настройки на своем компьютере — динамический IP и динамический DNS.
2016   network

Удаление ветки в GIT

Удаление локально ветки

git branch -D branch_to_be_deleted

Удаление удаленной ветки

git push origin --delete branch_to_be_deleted
2015   git

Уведомление на почту о заявке на обратный звонок

Файл app/addons/call_requests/controllers/frontend/call_requests.php
Найти

if (!defined('BOOTSTRAP')) { die('Access denied'); }

и заменить на

use Tygh\Mailer;
if (!defined('BOOTSTRAP')) { die('Access denied'); }

Ниже найти

elseif (!empty($res['notice'])) {
           fn_set_notification('N', __('notice'), $res['notice']);
}

и заменить на (только вписать свои email адреса)

elseif (!empty($res['notice'])) {
                                  
   Mailer::sendMail(array(
          'to' => 'email@email.com',
          'from' => 'email@email.com',
          'reply_to' => 'email@email.com',
          'data' => array(
           ),
          'tpl' => 'addons/call_requests/notification.tpl',
           ), 'C');
        
  fn_set_notification('N', __('notice'), $res['notice']);       
}

Затем идем в design/themes/[ваша тема]/mail/templates/addons/call_requests и создаем там два файла:
1) notification.tpl

{include file="common/letter_header.tpl"}
{__("hello")}<br /><br />
Поступила новая заявка на обратный звонок. Подробная информация в <a href="http://www.mysite.ru/admin.php?dispatch=call_requests.manage" target="_blank">панели управления сайтом</a>

2) notification_subj.tpl

Обратный звонок - новая заявка
2015   cms   web
2015   cms   web

Установка git + gitolite на CentOS 7

Подразумеваем, что уже установлена CentOS 7 со всеми обновлениями (yum update).
Сначала подготовим платформу:

yum install perl-devel gcc wget
wget http://search.cpan.org/CPAN/authors/id/S/SM/SMUELLER/Data-Dumper-2.154.tar.gz
tar xvzf Data-Dumper-2.154.tar.gz
cd Data-Dumper-2.154
perl Makefile.PL
make && make install

Дальше устанавливаем git:

yum install git

Создаем пользователя:

useradd -p PASSWORD git

В файле /etc/ssh/sshd_config (не путать с ssh_config) и раскомментируем строки:

RSAAutentification yes
PubkeyAutentification yes
AuthorizedKeysFile .ssh/authorized_keys

Перезапускаем на сервере демон sshd:

service sshd restart

Заходим под пользователем git:

su git
cd ~

Создаем ключ для пользователя git (с именем, например, id_git):

ssh-keygen -t rsa -b 2048

Из под root выставляем права:

chown git:git /home/git/.ssh/id_git.pub
chmod 700 /home/git/.ssh/
chmod 600 /home/git/.ssh/authorized_keys

Создадим недостающие папки:

mkdir /home/git/.gitolite
mkdir /home/git/.gitolite/logs

Устанавливаем gitolite из под git:

git clone git://github.com/sitaramc/gitolite
mkdir -p ~/bin
gitolite/install -ln ~/bin
gitolite setup -pk id_git.pub

Если последняя команда вызывает ошибку, то:

$HOME/bin/gitolite setup -pk ~/.ssh/id_git.pub

Дальше стягиваем себе репозиторий:

git clone git@host:gitolite-admin

Настраиваем под свои нужды и заливаем изменения на сервер.

2015   git   nix

CSS Unminifier

Случается, что нужно просмотреть сжатый css файл. Приходилось лезть на сайт и ждать когда вернется ответ, но был найден замечательный плагин для Sublime Text — CSS Unminifier.
Установка через Package Control (Ctrl+Shift+P), где выбрать Package Control: Install Package и ввести Css Unminifier.

Пользоваться CSS Unminifier проще простого: выделяем нужный текст и жмем Ctrl+Alt+U

2014   css   web

Как установить msu-пакет через ГПО

В рамках обновления KB2998527 пришлось изучить вопрос установки msu-пакетов.

Решение нашлось простое:
1) Открываем нужную нам политику
2) Идем Конфигурация компьютера — Политики — Конфигурация Windows — Сценарии (Запуск/завершение)
3) Открываем Автозагрузка и создаем сценарий:
Имя сценария: wusa.exe
Параметры сценария: <путь>\Windows6.1-KB2998527-x64.msu /quiet /norestart

2014   windows

Инвентаризация компьютеров средствами WMI и VBScript

Инвентаризация компьютеров при помощи данного скрипта поможет системному администратору решить следующие задачи в масштабе небольшой организации:

  • Подготовка отчета о количестве, размещении и составе системных блоков для бухгалтерии. Информацию о других основных средствах (мониторах, ИБП, принтерах и т. п.) придется собирать другими способами.
  • Отслеживание изменений в конфигурации компьютеров, в том числе — выявление случаев самовольной замены комплектующих.
  • Поиск, отбор и подсчет компьютеров с заданными характеристиками при планировании закупок или при решении каких-либо технических вопросов.

Возможности и особенности

Предлагаемый скрипт позволяет:

  • Собирать сведения о конфигурации множества компьютеров тремя разными способами — локально (если нет доступа по сети), удаленно (с рабочего места администратора), через logon-скрипт.
  • Сохранять отчеты о конфигурации компьютера в структурированный текстовый файл формата CSV, удобный для последующей автоматизированной обработки.
  • Создавать настраиваемый общий отчет по всем имеющимся компьютерам.

Отличительные особенности скрипта:

  • Используются встроенные в Windows 2000/XP/2003/Vista компоненты VBScript и WMI. Установка и лицензирование дополнительных программ не требуется.
  • В программном коде можно настроить состав и структуру отчета под свои нужды. При желании не трудно добавить вывод отчетов в других текстовых форматах (TXT, INI, HTML, XML), удобных для просмотра, печати или импорта в других программах.
  • Собираются и выводятся в отчет только действительно нужные для решения поставленных задач сведения. Скрипт не предназначен для сбора исчерпывающей информации о составе системного блока.

Загрузка и установка

Скрипт для инвентаризации компьютеров средствами WMI и VBScript, упакован ZIP: invent_comp.zip

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

Первый этап работы — сбор данных

Скрипт invent_comp.vbs собирает данные о конфигурации указанного компьютера и сохраняет отчет в формате CSV в заданный локальный каталог или на сетевой ресурс. Имя файла отчета соответствует сетевому имени компьютера. Есть несколько вариантов запуска.

Вариант 1 — для тестирования или для отдельных сетевых компьютеров и серверов

Для проверки скрипта при первом знакомстве, а также для сбора данных с серверов и отдельных компьютеров не дожидаясь их перезагрузки, можно запускать скрипт вручную, с рабочего места администратора. При этом достаточно использовать настройки по умолчанию, тогда отчеты будут сохраняться в подкаталог рядом со скриптом:

Const SILENT = FALSE 'тихий режим отключен, будет запрошено имя компьютера
Const DATA_DIR = "comp\" 'локальный каталог + "\" в конце

Вариант 2 — для сетевых рабочих станций

Скрипт может работать в «тихом» режиме, т. е. не выводить диалоги, собирать данные о локальном компьютере и сохранять отчет на заранее определенный сетевой ресурс. Таким образом возможен автоматический запуск на всех рабочих станциях сети, например при их включении. Для этого варианта запуска лучше создать и использовать отдельную копию файла.

Сначала необходимо выделить сетевой ресурс для сохранения отчетов и дать разрешение на запись пользователю (или группе пользователей), от имени которого будет запускаться скрипт.

Настройки в самом скрипте такие:

Const SILENT = TRUE 'режим отчета о локальном компьютере, без вывода диалогов
Const DATA_DIR = "\\SRV\Invent\comp\" 'сетевой ресурс + "\" в конце

Затем следует настроить запуск скрипта через logon-скрипт или групповую политику. Необходимо учитывать, что для обращения к компоненту WMI нужны права администратора — поэтому в групповой политике лучше включать скрипт в конфигурацию компьютера, а не пользователя.

Вариант 3 — для компьютеров, не подключенных к сети

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

Формат отчета с результатами
Результаты сохраняются в текстовый файл формата CSV. Каждая строка файла состоит из 4 полей, разделенных символом ; («точка с запятой»):

  • Тип компонента — используется для группировки
  • Название параметра
  • Номер экземпляра (целое число) — нужен для различения нескольких компонентов одного типа
  • Значение параметра

Если в значении какого-либо параметра встретится символ ;, он будет заменен на символ _. Значения полей не заключаются в кавычки. Первая строка содержит заголовки столбцов. При желании можно отключить добавление этой строки в настройках:

Const HEAD_LINE = False 'НЕ выводить заголовки в первой строке CSV-файла

Пример отчета:

Секция отчета;Параметр;Номер экземпляра;Значение
Компьютер;Дата проверки;1;10.06.2009 22:33:44
Компьютер;UUID;1;67DB3380-FEB7-11D5-8ED2-001E8CAD784C
Компьютер;Сетевое имя;1;COMP
Компьютер;Домен;1;WORKGROUP
Компьютер;Владелец;1;User
Компьютер;Текущий пользователь;1;COMP\Pavel
Компьютер;Объем памяти (Мб);1;2047
Операционная система;Наименование;1;Microsoft Windows XP Professional
Операционная система;Версия;1;5.1.2600
Операционная система;Обновление;1;Service Pack 3
Операционная система;Зарегистрированный пользователь;1;User
Операционная система;Серийный номер;1;XXXXX-XXX-XXXXXXX-XXXXX
Операционная система;Организация;1;1
Операционная система;Дата установки;1;06.08.2008 12:34:56
Материнская плата;Производитель;1;ASUSTeK Computer INC.
Материнская плата;Наименование;1;P5KPL-VM
Материнская плата;Версия;1;x.xx
Материнская плата;Серийный номер;1;MT7082K06808353
BIOS;Производитель;1;American Megatrends Inc.
BIOS;Наименование;1;BIOS Date: 07/28/08 14:07:15 Ver: 08.00.12
BIOS;Версия;1;0904
BIOS;Серийный номер;1;System Serial Number
Процессор;Наименование;1;Intel(R) Core(TM)2 Duo CPU E8200 @ 2.66GHz
Процессор;Описание;1;x86 Family 6 Model 23 Stepping 6
Процессор;Частота (МГц);1;2664
Процессор;Частота FSB (МГц);1;333
Процессор;Размер L2-кеша (кб);1;6144
Процессор;Разъем;1;Socket 775
Модуль памяти;Размер (Мб);1;1024
Модуль памяти;Частота;1;800
Модуль памяти;Размещение;1;DIMM A1
Модуль памяти;Размер (Мб);2;1024
Модуль памяти;Частота;2;800
Модуль памяти;Размещение;2;DIMM B1
Диск;Наименование;1;WDC WD3200AAKS-00C9A0
Диск;Размер (Гб);1;298
Диск;Интерфейс;1;IDE
Логический диск;Наименование;1;C:
Логический диск;Файловая система;1;NTFS
Логический диск;Размер (Гб);1;32
Логический диск;Свободно (Гб);1;14
Логический диск;Серийный номер;1;8C959CAC
CD-привод;Наименование;1;Optiarc DVD RW AD-5200A

Второй этап работы — составление общего отчета

Полученные на первом этапе отчеты можно не только просматривать по-отдельности, но и свести в одну таблицу. Скрипт invent_comp_report.vbs просматривает заданный каталог и из всех найденных там отчетов извлекает данные.

Перед запуском надо проверить настройки в тексте скрипта:

Const DATA_DIR = "comp\" 'каталог для сохранения отчетов + "\" в конце
Const DATA_EXT = ".csv" 'расширение файлов с данными
Const HEAD_LINE = True 'пропустить первую строку в файле CSV - заголовок
Const REPORT_FILE = "comp_report_%DATE%.htm" 'файл для сохранения отчета

Не все данные из отдельного отчета нужны в общем отчете. Какие столбцы и в каком порядке попадут в общий отчет определяется в программном коде через массив:

'количество, порядок и названия столбцов отчета
'значения должны соответствовать первым двум полям CSV файла!
Dim col(21) '

После запуска скрипта invent_comp_report.vbs будет создан файл в формате XHTML, который можно открыть в браузере, импортировать в OpenOffice.org Calc или Microsoft Excel (не проверено).

В таблице каждому компьютеру соответствует одна строка. Если на компьютере есть несколько комплектующих одного типа, то они оформляются в виде списка.

Для дополнительной обработки табличного отчета и вывода на печать предлагается использовать специально предназначенные для этого программы, например, OpenOffice.org Calc.

Тонкая настройка скрипта

Добавление и удаление параметров

Какие параметры и в каком порядке попадут в отчет определяется в программном коде процедуры InventComp. Каждой секции отчета, содержащей сведения по всем экземплярам какого-либо класса компонентов, соответствует один вызов подпрограммы Log. Вот пример:

Log "Win32_ComputerSystem", _
  "Name,Domain,PrimaryOwnerName,UserName,TotalPhysicalMemory", "", _
  "Компьютер", _
  "Сетевое имя,Домен,Владелец,Текущий пользователь,Объем памяти (Мб)"

Параметры вызова подпрограммы разнесены на несколько строк для наглядности. Третий параметр чаще всего — пустая строка, и поэтому расположен на одной строке со вторым.

Пояснение к параметрам данного вызова подпрограммы:

  • «Win32_ComputerSystem» — класс WMI, к которому идет запрос
  • «Name,Domain,PrimaryOwnerName... — свойства WMI (через запятую), значения которых надо включить в отчет
  • »» — условие отбора по правилам WQL (подробности далее), или пустая строка.
  • «Компьютер» — название соответствующей секции отчета, выводится в первом столбще CSV-файла.
  • «Сетевое имя,Домен,Владелец... — названия параметров (через запятую), соответствующих перечисленным выше свойствам WMI, в том же порядке и количестве, выводится во втором столбце CSV-файла.

Чтобы корректно добавить или изменить подобный вызов, необходимо найти и изучить документацию по соответствующему WMI-классу:

Также для составления и тестирования запросов к WMI можно использовать программы:

  • Microsoft WMI Object Browser — работает через web-интерфейс, входит в состав «WMI Administrative Tools»
  • WMI Explorer — не требует установки, автор Alexander Kozlov

Удаление ненужных значений

Чтобы в отчет не попадали отключенные сетевые адаптеры, минипорты и виртуальные адаптеры VMware, в запросе к классу Win32_NetworkAdapter добавлено условие:

"NetConnectionStatus > 0 AND NOT (Name LIKE 'VMware%')"

Чтобы в отчет попадали только локальные принтеры, подключенные через порт USB или LPT, в запросе к классу Win32_Printer добавлено условие:

"(Local = True OR Network = False) AND (PortName LIKE '%USB%' OR PortName LIKE '%LPT%')"

Чтобы в секцию отчета «Диск» попадали данные только о жестких дисках, в запросе к классу Win32_DiskDrive добавлено условие:

"InterfaceType <> 'USB'"

Соответственно, чтобы в секцию отчета «Логический диск» также попадали данные только о разделах жестких дисков, в запросе к классу Win32_LogicalDisk добавлено условие:

'DriveType = 3 - только локальные диски
'пропускаются USB-диски, размер которых обычно NULL
"DriveType = 3 AND Size IS NOT NULL"

В Windows 2000 компонент WMI не поддерживает некоторые WMI-классы, например сетевые адаптеры и принтеры. Причем, если все-таки отправить некорректный запрос, не вернется ни ответа, ни сообщения об ошибке — создание отчета просто прекратится. Поэтому добавлена проверка версии WMI-сервера — запрос выполняется только если номер сборки операционной системы больше или равен 2600 (Windows XP/2003):

If build >= 2600 Then
  Log "Win32_NetworkAdapter", _
If build >= 2600 Then
  Log "Win32_Printer", _

Видеоадаптеры ATI, имеющие два выхода отображаются как два отдельных адаптера, причем в названии второго есть слово «Secondary». Чтобы в отчете не отображались такие «двойники», в запросе к классу Win32_VideoController добавлено условие:

"NOT (Name LIKE '%Secondary')"

Формат значений

Размер дисков и объем памяти в WMI выдается в байтах. Чтобы в отчете значения какого-либо параметра выводились в более привычных кратных единицах, достаточно в конце названия параметра добавить условные символы (Мб) или (Гб). В скрипте есть проверка этих условных символов:

'если указана кратная единица измерения, перевести значение
ElseIf Right(names(i), 4) = "(Мб)" Then
  value = CStr(Round(value / 1024 ^ 2))
ElseIf Right(names(i), 4) = "(Гб)" Then
  value = CStr(Round(value / 1024 ^ 3))

Значения, имеющие тип «дата и время» распознаются по свойству CIMType и автоматически преобразуются в читаемый вид:

'если тип данных - дата, преобразовать в читаемый вид
ElseIf prop.CIMType = 101 Then
  value = ReadableDate(value)

Если значение является массивом (например, перечень поддерживаемых форматов бумаги у принтера — свойство PrinterPaperNames класса Win32_Printer), то все значения автоматически «склеиваются» в строку с запятой в качестве разделителя:

'если тип данных - массив, собрать в строку
ElseIf IsArray(value) Then
  value = Join(value,",")

Возможные проблемы и способы их устранения

При тестировании скрипта замечены такие ошибки:

Проблема Вероятная причина Как устранить
Сообщение «Компьютер удаленного сервера не существует или недоступен» Доступ к службе WMI удаленного компьютера заблокирован брандмауэром. Отключить службу брандмауэра, подключившись к удаленному компьютеру через консоль (оснастку) «Управление компьютером».
Сообщение «Разрешение отклонено» Не удается создать новый или обновить существующий файл отчета. Проверить, что в настройках скрипта указан нужный каталог для сохранения отчетов, файл отчета не занят другой программой и для него не установлен атрибут «только чтение», у скрипта достаточно разрешений на запись.
Сообщение «Объект не поддерживает это свойство или метод» Некоторые свойства объектов WMI не поддерживаются Windows 2000. При обращении к таким свойствам возникает ошибка. Например, при подключении к Windows 2000 такую ошибку вызывает обращение к свойствам ’NetConnectionStatus’, ’AdapterType’ элемента коллекции ’Win32_NetworkAdapter’. Проверить в документации по WMI, какие свойства не поддерживаются в некоторых ОС и перед обращением к таким свойствам проверять версию ОС или вообще их не использовать.
Неправильно определяется процессор Intel Core 2 в XP Это неточность компонента WMI, см. статью Microsoft на эту тему. Цитата: `The data that is returned indicates that the CPU name is «Intel Pentium III Xeon» or «Intel Pentium III.» However, System Properties or System Information (MSInfo32.exe) shows the name as «Intel(R) Core(TM)2 Duo CPU E8000»`. В упомянутой статье есть ссылка для загрузки исправления.
Неправильно определяется процессор Intel Celeron в XP Это неточность компонента WMI, см. статью Microsoft на эту тему. В упомянутой статье есть ссылка для загрузки исправления.
Не появляется окно «Отчет сохранен в файл», создание отчета останавливается Отправлен некорректный WMI-запрос — допущена синтаксическая ошибка или запрошенное свойство не поддерживается. Найти, исправить или отключить некорректный WMI-запрос.

(c) http://zheleznov.info

2014   windows

Меняем URL Redmine по умолчанию на корневой

Нужно закомментировать строку «SetEnv RAILS_RELATIVE_URL_ROOT» и удалить «/redmine» в параметре PassengerPreStart URL в файле /opt/bitnami/apps/redmine/conf/httpd-app.conf:

<Directory "/opt/bitnami/apps/redmine/htdocs/public">
    Options -MultiViews
    <IfVersion < 2.3 >
    Order allow,deny
    Allow from all
    </IfVersion>
    <IfVersion >= 2.3>
    Require all granted
    </IfVersion>
    # SetEnv RAILS_RELATIVE_URL_ROOT "/redmine"
    PassengerAppRoot "/opt/bitnami/apps/redmine/htdocs"
    <IfModule pagespeed_module>
        ModPagespeedDisallow "*"
    </IfModule>
</Directory>

PassengerPreStart http://127.0.0.1/

Закомментировать псевдонимы и директорию с веб-мордой в DocumentRoot в файле /opt/bitnami/apps/redmine/conf/httpd-prefix.conf:

# Alias /redmine/ "/opt/bitnami/apps/redmine/htdocs/public/"
# Alias /redmine "/opt/bitnami/apps/redmine/htdocs/public"

DocumentRoot "/opt/bitnami/apps/redmine/htdocs/public"

Include "/opt/bitnami/apps/redmine/conf/httpd-app.conf"

Проверить правильность конфигов:

$ sudo apachectl -t
Syntax OK

Наконец, если нет ошибок в конфигах, перезапустить Apache:

sudo /opt/bitnami/ctlscript.sh restart apache
2014   nix   web
Ранее Ctrl + ↓