1- 필요한 개발 도구 및 Linux 릴리스를 다운로드합니다.
2 단계-Linux 개발 도구로 전환하고 Solaris 를 계속 실행합니다. 이 방법을 사용하면 전환이 더 부드러워집니다.
3 단계-Linux 운영 체제에 익숙하지만 여전히 Sun 하드웨어에서 실행 중입니다.
4 단계-애플리케이션을 타겟 Linux 플랫폼으로 이동.
단계 1: 다운로드
필요한 컴파일러, 빌드 도구 및 관련 온라인 설명서 링크는 다음과 같습니다.
GCC(GNU 컴파일러 컬렉션) 키트에는 C 컴파일러 1 개와 C++ 컴파일러 1 개가 포함되어 있습니다.
Gcc.gnu.org/releases.html
온라인 설명서
Gcc.gnu.org/onlinedocs/gcc-2.95.2/gcc _ toc.html
Solaris GNU 컴파일러 및 make(gmake) 유틸리티
Www.sunfreeware.com/
온라인 설명서
Docs.sun.com/
Gnu.org/manual/make-3.79.1/html _ mono/make.html
Linux 는 다음 Linux 배포자에서 구할 수 있습니다.
Www.caldera.com/ 화산
빨간 모자 www.redhat.com/
수잔 www.suse.com/
터보 리눅스 www.터보 리눅스.com/
Linux 용 UltraSPARC 버전
썬 www.sun.com
2 단계: Solaris 에서 Linux 용 C/C++ 어플리케이션 구축.
설치 도구–먼저 Solaris 에 GNU 도구를 설치합니다. GNU compiler 와 make utility 는 Solaris 와 Linux 에서 모두 사용할 수 있기 때문에 Linux 애플리케이션을 처음 구축하기가 비교적 쉽습니다.
Makefile— 변환–응용 프로그램을 작성할 때 Solaris make 유틸리티 대신 GNU gmake 유틸리티를 사용합니다. GNU gmake 유틸리티가 Solaris make 유틸리티와 다르기 때문에 makefile 에서 사용되는 구성에 따라 GNU gmake 유틸리티에서 생성되는 오류 메시지가 나타날 수 있습니다. Make 도구 설명서를 사용하여 makefile 의 문제를 찾고 makefile 을 필요에 따라 조정할 수 있습니다.
컴파일 디버그-makefile 을 gmake 에서 사용할 수 있도록 수정할 때, makefile 에서 C 컴파일러를 호출하는 이름 cc 를 gcc, C++ 컴파일러의 이름 cc 를 g++ 로 변경합니다. 그런 다음 응용 프로그램을 컴파일합니다. 구성에서 발생한 오류 메시지 (있는 경우) 는 명령행 옵션 문제와 코드 문제의 두 가지 범주로 나눌 수 있습니다.
GNU 및 Sun 컴파일러에서 허용하는 다양한 명령줄 옵션으로 인해 발생하는 메시지를 찾습니다. -c' 및' -g' 와 같은 몇 가지 기본 옵션을 제외하고 두 컴파일러에서 허용되는 대부분의 옵션은 다릅니다. 컴파일러 문서를 참조하고 컴파일러 옵션 간의 차이에 맞게 makefile 을 수정합니다.
그런 다음 나머지 코드 관련 오류 메시지 및 경고를 처리할 수 있습니다. 컴파일러 간의 차이로 인한 문제를 이해하고 해결하려면 컴파일러 설명서를 참조하십시오.
3 단계: Linux 의 Sun UltraSPARC 버전에서 애플리케이션 구축 및 테스트.
이전된 응용 프로그램이 특정 UltraSPARC 하드웨어에 의존하는 경우 이전 프로세스의 중요한 단계입니다. Solaris 개발자는 기본 UltraSPARC 하드웨어를 포기하거나 응용 프로그램의 하드웨어 특정 부분을 수정하지 않고도 Linux 환경에 익숙해질 수 있습니다.
Linux 환경 설치–Sun UltraSPARC 에 Linux 및 GNU 유틸리티를 설치합니다.
런타임 API 컴파일 및 디버그-응용 프로그램을 작성할 때 GNU 유틸리티를 사용했기 때문에 이 단계에서 볼 수 있는 차이는 Solaris 와 Linux 간의 런타임 API (application programming interface) 차이로 제한됩니다. 이러한 차이점에 대해 더 알고 싶다면 런타임 인터페이스 섹션 (7 페이지) 을 참조하십시오. 응용 프로그램을 필요에 따라 조정합니다.
테스트-애플리케이션이 완전히 재구성된 후 철저한 검증 테스트를 수행합니다.
4 단계: 대상 Linux 플랫폼에서 애플리케이션 구축 및 테스트.
Linux 환경 설치-대상 하드웨어에 Linux 및 GNU 툴을 설치합니다.
응용 프로그램 복사 및 재구성-소스 코드 트리와 makefile 을 새 Linux 시스템에 복사하고 응용 프로그램을 재구성합니다. 3 단계를 완료하지 않은 경우 Solaris 와 Linux 간의 런타임 API 차이를 수용하도록 응용 프로그램을 수정해야 할 수 있습니다. 마지막으로 응용 프로그램에 UltraSPARC 관련 코드가 포함되어 있는 경우 필요에 따라 수정하여 코드 문제를 해결합니다.
대상 Linux 플랫폼에 맞게 설치 인스턴스를 수정합니다. 각 Linux 플랫폼 (릴리스) 의 구성 및 시작 파일 위치는 약간 다릅니다.
테스트—마이그레이션을 완료하기 전에 마이그레이션된 애플리케이션에 대해 포괄적인 검증 테스트 키트를 실행합니다. 또한 대상 Linux 플랫폼에서 구성 및 설치를 테스트합니다.
경고! 라이센스 및 저작권 조항–Linux 로 마이그레이션하고 애플리케이션을 오픈 소스 라이브러리에 연결할 때 이러한 라이브러리와 관련된 라이센스 및 저작권을 기록해 두십시오. 적어도 새로 마이그레이션한 C/C++ 응용프로그램은 GNU C/C++ 런타임 라이브러리에 연결됩니다. 이 라이브러리는 GNU 느슨한 일반 공중 사용 허가로 보호됩니다. 이식 소프트웨어가 특허를 받은 경우 GNU 도구를 사용하여 구축한 후 판매하려는 경우 GNU general public license 및 GNU release general public license (www.gnu.org/licenses/licenses.html) 에 명시된 약관을 충분히 이해하는 것이 좋습니다. 소프트웨어가 GNU 라이센스로 보호되는 라이브러리에 연결된 경우 GNU 라이센스의 일부 약관이 소프트웨어에 적용됩니다.
Java 응용 프로그램 마이그레이션 가이드
1- 필요한 개발 도구를 다운로드합니다.
2 단계-대상 Linux 플랫폼에서 애플리케이션 사용.
단계 1: 다운로드
Java 로 작성된 응용 프로그램 개발을 Solaris 에서 Linux 로 옮기는 것은 매우 간단합니다. 마이그레이션 작업을 완료하는 데 필요한 도구는 다음과 같습니다.
Linux 버전의 Java 2 Developer Kit 에는 향상된 실시간 컴파일 기능인 ibm.com/developerworks/Java/JDK/Linux/kr 을 갖춘 재구성된 JVM (Java virtual machine) 이 포함되어 있습니다
GCC 키트에는 Java 컴파일러 (gcj)gnu.org/software/gcc/java/.
2 단계: 대상 Linux 플랫폼에서 응용 프로그램 사용.
JVM 이 실행 중인 운영 체제에 관계없이 JVM 은 동일한 바이트 코드를 허용하므로 한 운영 체제에서 Java 소스 파일을 컴파일하고 다른 운영 체제에서 생성된 클래스 파일을 실행하도록 선택할 수 있습니다. 예를 들어 Linux 가 주요 개발 플랫폼인 경우 Linux 에서 만든 Java 클래스 파일은 Solaris 또는 호환 JVM 이 있는 다른 플랫폼에서도 잘 작동합니다.
런타임 인터페이스
Linux 와 Solaris 의 런타임 인터페이스는 대부분 동일하지만 몇 가지 차이점이 있습니다. 응용 프로그램에서 Linux 에 없거나 동일하지 않은 모든 Solaris 인터페이스를 수정해야 합니다. 그렇지 않으면 응용 프로그램이 제대로 구축되지 않습니다. 다음은 차이점입니다.
시스템 호출, c 라이브러리 및 C++ 라이브러리
API 차이–—Solaris 커널은 논리 볼륨 지원, ACL (파일 액세스 제어 목록) 관리 및 시스템 감사 로그 기능을 제공합니다. Linux API 의 이러한 특성 (있는 경우) 은 Solaris 의 특성과 다릅니다. 또한 Linux 는 기본적으로 스트림을 지원하지 않습니다. 네트워크에서 스트림을 사용하는 응용 프로그램에는 POSIX 소켓이 필요합니다. 또한 Linux 의 많은 Solaris API 는 다른 반환 및 매개 변수 유형을 사용하거나 다른 헤더 파일에 선언합니다. 그러나 이러한 차이는 일반적으로 매우 작으며 일반적으로 응용 프로그램에서 코드를 수정할 필요가 없습니다.
C++ 라이브러리 -Solaris forte6C++ 컴파일러에는 복수형 (-compat=4), 클래식 iostream 및 표준 c++ 라이브러리 (표준 복수형 및 iostream 포함) 의 세 가지 클래스 라이브러리가 포함되어 있습니다. GCC 에는 표준 C++ 라이브러리만 포함되어 있습니다. 변환된 응용프로그램에서 -compat=4 복합 라이브러리 또는 클래식 iostream 라이브러리를 사용하는 경우 응용프로그램은 표준 C++ 라이브러리에 포함된 라이브러리의 표준 버전을 사용해야 합니다. 이러한 수정의 추가적인 이점은 응용 프로그램의 이식성이 향상되었다는 것입니다.
데스크톱: CDE 대 난쟁이 /KDE
그래픽 사용자 인터페이스 (GUI)— Solaris 의 기본 데스크탑 CDE (common desktop environment) 는 일반 Linux 릴리스에 포함되지 않습니다. CDE 가 필요한 어플리케이션이나 이러한 특수한 GUI 환경을 선호하는 사용자는 www.xig.com 의 Xi 그래픽 회사에서 Linux 버전의 CDE DeXtop 제품을 받을 수 있습니다. DeXtop Linux 를 실행하여 Solaris 사용자를 친숙한 GUI 환경에 배치하면 Linux 로의 마이그레이션으로 인한 변경 사항에 쉽게 적응할 수 있습니다.
DeXtop 에는 Xi 그래픽 회사에서 제공하는 Accelerated-X Linux X-Server 가 필요합니다. XFree86 Linux X-Server 는 Dextopp 를 실행할 수 있지만 Xi 그래픽은 XFree86 에서 Dextopp 실행을 공식적으로 지원하지 않습니다.
스레드 및 프로세스 관리
스레드/LWP (lightweight process) 지원–Solaris 는 POSIX 스레드 및 Solaris 전용 스레드 모델을 지원합니다. 마이그레이션된 응용 프로그램이 Solaris 전용 스레드 API 를 사용하는 경우 응용 프로그램을 POSIX 스레드로 변경하는 것이 좋습니다. POSIX 스레드는 이식성이 뛰어나고 Linux 도 지원합니다.
프로세스 관리: /proc 파일 시스템 -/proc 유사 파일 시스템은 커널 데이터 구조에 쉽게 액세스할 수 있는 방법을 제공합니다. Solaris 에서 /proc 에는 활성 프로세스 및 스레드에 대한 정보가 포함되어 있으며 /proc 는 이러한 프로세스 및 스레드를 제어하는 인터페이스도 제공합니다. 디버거는 일반적으로 Solaris 의 /proc 제어 인터페이스를 사용하여 프로그램 실행을 추적합니다. Linux 에서 /proc 는 프로세스 제어 인터페이스를 제공하지 않습니다. Linux 에서 디버깅할 때 프로세스를 제어하려면 /proc 대신 ptrace() API 를 사용합니다.
런타임 시 고려해야 할 요소
시스템 관리: 일반적으로 Linux 관리는 다른 모든 UNIX 운영 체제를 관리하는 것과 매우 유사합니다. 그러나 일부 명령과 임무의 세부 사항은 다르다. IBM 과 UNIX guide (UNIX guide.net/UNIX guide.cgi) 는 Solaris 와 Linux 의 차이점, AIX 와 다른 버전의 UNIX 간의 차이점을 요약한 비교표를 발표했습니다. 숙련된 Solaris 시스템 관리자는 큰 어려움 없이 Linux 를 쉽게 사용할 수 있습니다.
기타 타사 도구, 유틸리티 및 라이브러리: Solaris 에서 일반적으로 사용되는 많은 타사 도구, 유틸리티 및 라이브러리도 Linux 에서 사용할 수 있습니다. 예를 들면 다음과 같습니다.
Rational Rose 및 기타 Rational 제품은 Solaris 및 Linux 에서 사용할 수 있습니다.
Rogue Wave SourcePro C++ 라이브러리는 Forte/Solaris, GCC/Solaris 및 GCC/Linux 에서 사용할 수 있습니다.
Trolltech Qt C++ GUI 프레임워크는 Solaris 및 Linux 에서 사용할 수 있습니다.
Linux 의 보급으로 Linux 를 지원하는 타사 공급업체가 늘고 있습니다.
끝수 형식–—Sun SPARC 및 UltraSPARC 프로세서는 큰 끝수 형식으로 정수를 저장합니다. Linux/Intel 과 같은 작은 끝수 방법을 사용하는 Linux 버전으로 응용 프로그램을 이전하려면 응용 프로그램의 모든 끝수 형식에 대한 종속성을 해결해야 응용 프로그램이 제대로 작동합니다. 또 다른 방법은 Linux/Intel 대신 Linux/PowerPC, zSeries 의 Linux 또는 Linux/UltraSPARC (두 플랫폼 모두 대미수법) 로 애플리케이션을 마이그레이션하는 것입니다.
ZSeries 의 Linux 에서 Linux 로 마이그레이션
이제 Linux 를 한 플랫폼 (예: Intel) 으로 포팅했습니다. 그러면 Linux 를 다른 하드웨어 플랫폼으로 포팅할 수 있을까요? 간단한 대답은: 쉽습니다.
다음 두 가지 이유로 zSeries 를 예로 선택했습니다.
ZSeries 는 한 Linux 에서 다른 Linux 로 이식하는 좋은 예입니다. zSeries 의 아키텍처는 Intel 과 완전히 다르기 때문입니다. 많은 ISV 가 먼저 유닉스 애플리케이션을 인텔의 UNIX 에 이식하는 것은 자연스러운 선택이다. 그렇다면 zSeries 에 앱을 이식하는 리눅스는 많은 노력이 필요하지 않다.
가상화 분야의 고유한 기능과 하드웨어 안정성 및 가용성 때문에 zSeries 는 고객에게 매력적인 플랫폼일 수 있습니다.
ZSeries 에서 Linux 로 마이그레이션해야 하는 이유는 무엇입니까?
ZSeries 의 Linux 는 순수 Linux 입니다. 기존 zSeries 운영 체제의 특수 Linux 나 zSeries 아키텍처용으로 수정된 특수 버전의 Linux 가 아닙니다. ZSeries 의 Linux 는 다른 플랫폼의 Linux 와 같은 특징을 가지고 있습니다. 예를 들어 순수 ASCII 환경입니다. 대부분의 리눅스 구조는 모든 아키텍처에 대해 동일합니다. ZSeries 관련 수정을 통해 Linux 는 zSeries 메모리, zSeries 디스크 및 통신 하드웨어와 통신할 수 있습니다. Linux 와 애플리케이션 간의 인터페이스 및 Linux 와 사용자 간의 인터페이스는 영향을 받지 않습니다.
애플리케이션 이점—zSeries 의 Linux 에 있는 Linux/UNIX 애플리케이션을 통해 zSeries 환경에 저장된 엔터프라이즈 데이터 (백엔드 통합) 를 액세스할 수 있습니다. 따라서 응답 속도가 향상되고 불필요한 데이터 중복이 줄어듭니다. ZSeries 의 뛰어난 용량, 확장성, 안정성, 가용성 및 보안으로 엔터프라이즈 서버 어플리케이션을 위한 완벽한 배포 플랫폼이 되었습니다. 또한 비즈니스 환경에서 zSeries 의 Linux 는 서버 수를 줄여 운영을 단순화하고 비용을 절감합니다.
ZSeries 에 Linux 포팅 팁 및 요령
이러한 기술과 노하우는 zSeries 의 Linux 로 애플리케이션을 마이그레이션하는 IBM 기술 팀에 의해 요약됩니다. 이 파일의 전체 텍스트는 ibm.com/servers/esdd/articles/Linux _ s390/index.html 에서 구할 수 있습니다
작은 꼬리수법에서 큰 꼬리수법까지.
S/390 은 큰 꼬리 시스템입니다. 코드가 작은 꼬리 시스템에서 생성된 바이트 지향 데이터를 처리하려는 경우 코드에 바이트 교환이 필요할 수 있습니다. 이러한 데이터는 재생성해야 할 수도 있습니다. 그렇지 않은 경우 (예: * * * * 좋아하는 파일) 작은 꼬리 데이터 처리에 맞게 애플리케이션을 수정해야 합니다. 원래 플랫폼이 큰 꼬리 플랫폼이라면 (예: UltraSPARC, IBM pseries? ......), 그럼 이 문제는 존재하지 않습니다.
환번호
어셈블리 코드는 S/390 어셈블러로 다시 작성해야 합니다. 모든 운영 코드를 S/390 운영 코드로 변경해야 합니다. 응용 프로그램 코드가 어셈블리 헤더 파일을 사용하는 경우 S/390 버전의 헤더 파일이 필요합니다. S/390 어셈블리 코드의 Linux 버전은 S/390 Opcode 를 사용하지만 GNU 어셈블리 프로그램의 구문 규칙을 따릅니다. GNU 어셈블리 매뉴얼은 www.gnu.org/manual/gas-2.9.1/as.html 에서 다운로드할 수 있습니다
절대 주소 및 상위
일부 응용 프로그램은 다양한 목적으로 하드 코딩된 주소를 사용합니다. 한 가지 가능한 목적은 mmap () 을 사용하여 메모리에 고정 페이지를 정의하여 할당하거나 메모리 매핑을 하는 것입니다. Mmap () 호출의 한 형태로 페이지 잠금을 허용합니다. 이 모드에서 mmap () 은 요청된 주소의 메모리를 메모리 매핑에 사용하려고 합니다. 인텔 플랫폼에서 이 주소는 zSeries 의 Intel 를 사용할 수 없는 곳에 지정될 수 있습니다.
플랫폼마다 프로그램 스택 위치, 시스템 라이브러리, 힙 등이 다를 수 있습니다. 따라서 다른 시스템으로 마이그레이션할 때 하드 코딩된 주소는 일반적으로 나쁜 선택입니다. ZSeries 의 주소 지정 모드도 상위 비트를 무시하므로 하드 코드된 주소 0x80000000 (상위 비트는 1) 은 0x00000000 으로 변환됩니다. 이는 zSeries 의 예약된 주소입니다. 주소를 생성할 때 주소에 대한 산술연산도 고위층을 1 으로 만들 수 있습니다.
응용 프로그램이 절대 주소 사용으로 인해 세그먼트 충돌이나 기타 오류를 발생시킨 경우 수정해야 합니다. /proc//map 은 활성 프로세스가 주소 지정 공간의 저장 범위를 사용하는 방법을 보여줍니다. 코드에서 절대 주소를 사용해야 하는 경우 이 매핑을 사용하여 예약되지 않은 주소 범위를 찾을 수 있습니다.
일부 주소 필드의 고위층은 and (3 1 비트 모드 비트) 를 사용하여 0 으로 변경할 수 있습니다. 주소가 산술 연산에 사용되는 경우 이렇게 해야 합니다.
응용 개발 도구
대상 서버에 응용 프로그램을 배포하려면 강력한 도구 세트가 필요합니다. Ibm.com/servers/eserver/zSeries/OS/Linux/ldt/웹 사이트는 zseries 에서 Linux 를 개발하거나 마이그레이션하는 C/C++ 애플리케이션의 여러 단계를 설명하고 각 단계를 제공합니다
잡동사니
Ptace 및 return 구조 ptrace 및 return 구조의 사용은 아키텍처와 관련이 있습니다.
구성/구축 /Makefile 스크립트 또는 파일—S/390 플랫폼에 대한 지원이 추가될 가능성이 높습니다.
Proc 파일 시스템—다음과 같은 몇 가지 차이점이 있습니다.
/proc/cpuinfo 형식이 다릅니다.
/proc/ 인터럽트가 구현되지 않았습니다.
/proc/stat 에는 INTR 정보가 포함되어 있지 않습니다.
Char 은 부호 없는 것입니다. zSeries 에서 char 문자 유형은 기본적으로 부호 없는 char 로 해석되고, 다른 플랫폼에서는 char 이 부호 있는 char 로 해석됩니다.
Va _ args—-zSeries 버전의 Linux 에서 va_list 는 다른 플랫폼과 다르게 정의됩니다. 응용 프로그램에서 단순히 c 대입문을 사용하여 va_list 를 복제하는 경우 Linux 의 zSeries 버전에서는 대신 _va_copy 매크로를 사용해야 합니다.