Ubuntu 20.04에 nextcloud 설치.

Ubuntu 20.04 (raspberry pi 4)에 nextcloud 설치하기

Raspberry Pi 4를 이용해서 사용할만한 cloud storage를 찾아보다가 IOS와 데스크탑 클라이언트가 제공되는 pydio cells 와 nextcloud를 후보(?)로 올렸다.
pydio cells는 ARM 용으로 컴파일된 패키지를 제공하지 않아서 소스코드를 다운로드 받아 컴파일했으나, 결과가 좋지 않았다.
컴파일은 잘 되었으나, mysql8을 이용한 로그인 과정에서 문제 발생했으며, mysql5.7 버전으로 변경해서 설치했으나 로그인 후 사용이 불가능할 정도로 오류가 발생해서 포기했다.

반면, nextcloud는 시험 사용중에 특별한 문제는 발생하지 않았고, 성능도 크게 떨어지지 않았다.

* 작업환경
Hardware: raspberry pi 4 4GB
OS: ubuntu server 20.04

* 사전 설치
웹서버: apache2
데이타베이스: mysql-8
PHP: 7.4
기타 : nextcloud가 요구하는 php 모듈(https://docs.nextcloud.com/server/20/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation)

1. NextCloud 다운로드
apache2, php7.4, 기타 필요한 패키지는 apt로 설치하였으며, 여기서는 생략한다.

먼저 nextcloud를 설치할 디렉토리를 만들고 다운로드한다. 여기서는 /home/cloud 를 사용한다.

$ sudo -i
# mkdir /home/cloud
# cd /home/cloud
# curl -O https://download.nextcloud.com/server/releases/nextcloud-20.0.4.zip

압축을 해제한다.

# unzip nextcloud-20.0.4.zip

압축해제한 디렉토리 이름을 웹서버에서 설정할 디렉토리 이름으로 변경한다. 여기서는 public_html 로 변경한다.

# mv nextcloud public_html

웹서버가 접근가능하도록 소유권을 변경한다.

# chown -R www-data:www-data /home/cloud

Continue reading

ip 주소를 숫자로 바꾸기 – python ipaddress 모듈.

ip 주소 정렬 문제

ip 주소를 정렬하려고 하면 자릿 수 때문에 원하는 결과가 나오지 않는다.

172.16.10.10
172.16.1.100
172.16.1.1
172.16.1.9
172.16.1.11
172.16.11.100
172.26.11.10

이 내용을 엑셀을 이용하여(또는 리눅스 sort 명령을 이용하여) 정렬하면,

172.16.1.1
172.16.1.100
172.16.1.11
172.16.1.9
172.16.10.10
172.16.11.100
172.26.11.10

처럼, 원하는 결과가 나오지 않는다.

Continue reading

solaris NFS 서버 설정과 사용하기.

Solaris NFS 설정과 사용하기

작업환경:

* NFS 서버
os: solaris 10
hostname: fox_master

* NFS client
os: solaris 9
hostname: wolf

* 각 서버의 /etc/hosts 파일에 ip주소와 호스트네임이 동일하게 설정되어 있어야 한다.

# cat /etc/hosts
...
172.30.100.30   fox_master
172.30.100.31   wolf

Continue reading

solaris 9 flarcreate 오류.

solaris 9 flarcreate 실행 오류.

flarcreate는 시스템의 이미지를 만들 수 있는 솔라리스 명령어다.  solaris 9에서 아래와 같은 오류가 발생했다.

# cd /
# flarcreate -n backup_system -S  -x /export  /export/dump/backup_system.flar
/usr/sbin/flarcreate[684]: syntax error at line 684 : `-m' unexpected

해당 파일을 살펴보니, ksh 스크립트로 작성된 것을 확인 할 수 있었고, 오류가 난 684번 줄은, 아래와 같다.

# vi /usr/sbin/flarcreate
# Make the tempdir unreadable for others
[[ ${MKDIR} -m 700 $TEMP_DIR ]] ||

이것을 주석처리하고, 아래 처럼 “[[“, “]]”를 제거 한다.

#[[ ${MKDIR} -m 700 $TEMP_DIR ]] ||
${MKDIR} -m 700 $TEMP_DIR  ||

이제, 명령을 다시 실행하면 잘 실행된다.

# flarcreate -n backup_system -S  -x /export/dump  /export/dump/backup_system.flar
Full Flash
Checking integrity...
Integrity OK.
WARNING:  fdo: Ignoring duplicate filter entry. Choosen entry will be: /export/dump -
Running precreation scripts...
Precreation scripts done.
Creating the archive...

Aruba IAP 모드를 CAP 모드로 변경하는 방법 – wifi 연결 사용.

Aruba wifi 연결로 IAP 모드를 CAP 모드로 변경하는 방법

사용 모델: AP-325
사전준비 사항: AP설정(Aruba AP 105 공장 초기화 및 설정 참고)

이전글 Aruba AP ISA 모드를 CAP 모드로 변경하는 방법 – serial console 사용에서는 콘솔 케이블 연결로 아루바 AP의 IAP 모드를 CAP로 변경하였다. 하지만, wifi로 AP에 접속하여 변경 할 수도 있다.

아루바 AP가 IAP 모드로 설정되어 있다면, 아래 그림처럼 SetMeUp-xx:xx:xx 형식의 SSID를 볼 수 있다. 여기서 접속 할 SSID를 선택하여 AP에 연결한다.

Continue reading

Aruba AP의 IAP 모드를 CAP 모드로 변경하는 방법 – serial console 사용

Aruba IAP 모드를 CAP 모드로 변경하는 방법 – serial console 사용.

사용 AP 모델: AP-325
사전작업: AP 설정 완료.(설정 참고: Aruba AP 105 공장 초기화 및 설정)

AP-325를 설정하고 네트워크에 연결 하였으나, 컨트롤러에서 인식하지 못하는 문제가 발생하였다.

새로 붙인 AP들이 아래 그림처럼 SetMeUp-xx:xx:xx 같은 이름으로 보인다면 이들 AP는 초기 값이 IAP(Instant AP)로 설정되어 있는 상태이다. IAP는 무선랜 컨트롤러 없이 사용되는 모드다.

이것을 컨트롤러에서 관리하려면, RAP(Remote AP)나 CAP(Campus AP)로 변환하여야 한다.

console로 연결하여 AP를 설정하고 부팅하면 아래처럼 user, password 를 물어보는데, 초기 설정값은 admin, admin 이다.
IAP를 CAP로 바꾸려면 convert-aos-ap 형식의 명령어를 사용하면 된다.

이때, AP와 컨트롤러사이는 통신이 되고 있는 상태여야 한다. 그렇지 않으면 변환(convert) 되지 않는다.

Continue reading

C3550 Software Forced Crash Exception (0x0700) – 결국 고장남.

C3550 Software Forced Crash Exception (0x0700) – 결국 고장남.

사용중이던 c3550 스위치가 재부팅되며 아래와 같은 로그를 남김.
로그 남긴 3~4 시간 후에 대부분의 포트가 죽어버렸고, 재부팅 후에도 복구되지 않아서 다른 장비로 교체했다.
단지, 기록 차원에서 남겨 본다.

.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: System previously crashed with the following message:
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Cisco IOS Software, C3550 Software (C3550-IPBASE-M), Version 12.2(44)SE6, RELEASE SOFTWARE (fc1)
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Copyright (c) 1986-2009 by Cisco Systems, Inc.
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Compiled Mon 09-Mar-09 14:33 by gereddy
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED:  
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Software Forced Crash Exception (0x0700)!
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: CPU Register Context:
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Vector = 0x00000700  PC = 0x003EE914  MSR = 0x0002B030  CR = 0x20000004
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: LR = 0x003EE914  CTR = 0x00459FF4  XER = 0x00000000
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: R0 = 0x003EE914  R1 = 0x01B1DEC4  R2 = 0x00000000  R3 = 0x00000000
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: R4 = 0x00CB7FDC  R5 = 0x0000B030  R6 = 0xFEE00000  R7 = 0xBEEFCAFE
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: R8 = 0x01290000  R9 = 0x01450000  R10 = 0x013BB4F0  R11 = 0x000003E0
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: R12 = 0x44444028  R13 = 0xEFF7FFFF  R14 = 0x0046AF5C  R15 = 0x00000000
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: R16 = 0x00000000  R17 = 0x00000000  R18 = 0x00000000  R19 = 0x00000000
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: R20 = 0x00000000  R21 = 0x00000000  R22 = 0x00000000  R23 = 0x00000000
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: R24 = 0x00000000  R25 = 0x00000000  R26 = 0x00000000  R27 = 0x81000000
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: R28 = 0x00000006  R29 = 0x00000000  R30 = 0x00000000  R31 = 0x00000003
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED:  
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Stack trace:
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: PC = 0x003EE914, SP = 0x01B1DEC4
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 00: SP = 0x01B1DED4    PC = 0x003EE914
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 01: SP = 0x01B1DEE4    PC = 0x003E6AF0
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 02: SP = 0x01B1DEFC    PC = 0x003F0C98
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 03: SP = 0x01B1DF48    PC = 0x003E564C
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 04: SP = 0x01B1DF70    PC = 0x00457830
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 05: SP = 0x01B1DF78    PC = 0x0045A080
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 06: SP = 0x01B1DF90    PC = 0x0046B02C
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 07: SP = 0x01B1DF98    PC = 0x003F08F0
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED: Frame 08: SP = 0x00000000    PC = 0x003E7600
.Nov  2 15:19:00: %PLATFORM_CAT3550-1-CRASHED:  

dir 명령어로 crashinfo 관련 내용을 확인하면 아래처럼 crashinfo_ext와 crash_info 두개의 디렉토리가 보인다.

Switch #dir flash:
Directory of flash:/

    2  -rwx     4271779   Mar 1 1993 09:12:54 +09:00  c3550-i5q3l2-mz.121-22.EA7.bin
    4  -rwx        1048  Apr 22 2020 13:04:10 +09:00  multiple-fs
    5  -rwx     6719771  Feb 10 2011 17:05:48 +09:00  c3550-ipbase-mz.122-44.SE6.bin
    6  -rwx           5  Apr 22 2020 13:04:10 +09:00  private-config.text
    7  -rwx       11505  Apr 22 2020 13:04:10 +09:00  config.text
    8  -rwx           0  Feb 10 2011 17:11:11 +09:00  env_vars
    9  -rwx          42  Feb 10 2011 17:11:11 +09:00  system_env_vars
   10  drwx          64   Nov 2 2020 15:14:55 +09:00  crashinfo_ext
   12  drwx          64   Mar 1 1993 09:00:11 +09:00  crashinfo
   14  -rwx         676   Mar 1 1993 09:01:11 +09:00  vlan.dat

15998976 bytes total (4686336 bytes free)

Continue reading

mysqldump 오류? 버그?

MySQL 5.7 mysqldump 오류? 버그?

mysql 버전 확인

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using  EditLine wrapper

mysqldump 명령으로 데이타베이스 백업을 할 때, 아래와 같은 오류메시지가 나왔다.

$ mysqldump -Q -u boxcorea -p boxcorea > boxcorea20201019.sql
Enter password:
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

Continue reading

django Mongodb connector 설정하기

Django mongodb connector 설정하기

참고문서: https://nesdis.github.io/djongo/get-started/

사전작업: mongodb 설치, django3.1 설치.

1. django-mongodb connector(djongo) 설치.
pip 로 django를 설치하면 아래처럼 몇몇 패키지들은 제거되고 django3.0.5가 설치된다. django 3.1버전이 지원되지 않아서 그런듯 하다.

pip install django
Collecting django
  Using cached https://files.pythonhosted.org/packages/2b/5a/4bd5624546912082a1bd2709d0edc0685f5c7827a278d806a20cf6adea28/Django-3.1-py3-none-any.whl
Collecting pytz (from django)
  Using cached https://files.pythonhosted.org/packages/4f/a4/879454d49688e2fad93e59d7d4efda580b783c745fd2ec2a3adf87b0808d/pytz-2020.1-py2.py3-none-any.whl
Collecting sqlparse>=0.2.2 (from django)
  Using cached https://files.pythonhosted.org/packages/85/ee/6e821932f413a5c4b76be9c5936e313e4fc626b33f16e027866e1d60f588/sqlparse-0.3.1-py2.py3-none-any.whl
Collecting asgiref~=3.2.10 (from django)
  Using cached https://files.pythonhosted.org/packages/d5/eb/64725b25f991010307fd18a9e0c1f0e6dff2f03622fc4bcbcdb2244f60d6/asgiref-3.2.10-py3-none-any.whl
Installing collected packages: pytz, sqlparse, asgiref, django
Successfully installed asgiref-3.2.10 django-3.1 pytz-2020.1 sqlparse-0.3.1
...

Requirement already satisfied: asgiref~=3.2 in d:\python_project\bctools\venv\lib\site-packages (from django<=3.0.5,>=2.1->djongo) (3.2.10)
Requirement already satisfied: pytz in d:\python_project\bctools\venv\lib\site-packages (from django<=3.0.5,>=2.1->djongo) (2020.1)
Installing collected packages: sqlparse, pymongo, django, djongo
  Found existing installation: sqlparse 0.3.1
    Uninstalling sqlparse-0.3.1:
      Successfully uninstalled sqlparse-0.3.1
  Found existing installation: Django 3.1
    Uninstalling Django-3.1:
      Successfully uninstalled Django-3.1
  Running setup.py install for djongo ... done
Successfully installed django-3.0.5 djongo-1.3.3 pymongo-3.11.0 sqlparse-0.2.4

Continue reading

Python Tibero odbc

현 시점에, Django가 티베로 odbc를 지원하지 않기때문에, 프로그래밍할때 ORM 사용은 불가능하다. 때문에, 아래와 같은 클래스를 만들어서 사용했다.

티베로 ODBC설정은 Ubuntu+Tibero+Python3+ODBC 연결하기를 참고하면 된다.

insert, delete 문은 execute 메소드를 사용하면되며, 결과값이 있는 쿼리는 query나 fetchone, fetchall 메소드를 사용하면된다. 윈도우 환경에서는 setdecoding 관련 부분이 필요 없지만, 리눅스 환경에서는 꼭 필요하다.

# Use to Tibero database from ODBC.
# if has return query then use query, else execute...

import pyodbc


class Tibero:
    def __init__(self):
        dbuser = 'tibero_user'
        dbpass = 'tibero_password'
        dsn = 'ODBC_DSN'
        self.coninfo = 'DSN=%s;UID=%s;PWD=%s' % (dsn, dbuser, dbpass)
        self._conn = pyodbc.connect(self.coninfo)

        # setdecoding not need to windows, but need to linux
        self._conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
        self._conn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
        self._conn.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-32le')
        self._conn.setencoding(encoding='utf-8')
        self._cursor = self._conn.cursor()

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.close()

    @property
    def connect(self):
        return self._conn

    @property
    def cursor(self):
        return self._cursor

    def commit(self):
        self.connect.commit()

    def close(self, commit=True):
        if commit:
            self.commit()
        self.connect.close()

    def execute(self, sql, params=None):
        self.cursor.execute(sql, params or ())

    def fetchall(self):
        return self.cursor.fetchall()

    def fetchone(self):
        return self.cursor.fetchone()

    def query(self, sql, params=None):
        self.cursor.execute(sql, params or ())
        return self.fetchall()